entity-framework - EF Code 一、如何实现从一张表到另一张表的两个外键?

标签 entity-framework code-first

我最近下载了 Entity Framework Code First CTP5 ,并在这种情况下遇到麻烦。我有两个表如下:

Members table :
  ID  
  Name

Comments table :  
  ID  
  Comment  
  CommentedMemberID  
  CommentMemberID  

And, the data should be like the following:

Members  
ID Name   
1  Mike  
2  John  
3  Tom  

Comments  
ID Comment CommentedMemberID CommentMemberID  
1  Good 1 2       
2  Good 1 3  
3  Bad  2 1  

Then, I coded as shown below:

public class Member
{
    public int ID {get; set; }
    public string Name { get; set;}
    public virtual ICollection<Comment> Comments { get; set;}
}

public class Comment
{
    public int ID { get; set; }
    public string Comment { get; set; }
    public int CommentedMemberID { get; set; }
    public int CommentMemberID{ get; set; }

    public virtual Member CommentedMember { get; set; }
    public virtual Member CommentMember { get; set; }
}

public class TestContext : DbContext
{
    public DbSet<Member> Members { get; set; }
    public DbSet<Comment> Comments { get; set; }
}

但是当我在 cshtml 上运行这些模型时,它给我错误说“无法创建 CommentMember 实例”或类似的东西(抱歉,我已经更改了我的模型以进行 EF Code First 评估,因此无法重现相同的错误)。

我也试过使用 OnModelCreatingTestContext ,但找不到任何好的说明,不知道该怎么做。我看到了一篇关于EF Code First CTP3的博文,貌似那个版本还有一个RelatedTo属性,但是现在已经没有了。

谁能知道如何让它正常工作?或者这是一种完全错误的方式来处理这种情况?

谢谢,

最佳答案

这是一种特殊情况,您需要使用 fluent API 来配置您的关联。这将解决问题:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Comment>().HasRequired(c => c.CommentedMember)
                                  .WithMany(m => m.Comments)
                                  .HasForeignKey(c => c.CommentedMemberID)
                                  .WillCascadeOnDelete();

    modelBuilder.Entity<Comment>().HasRequired(c => c.CommentMember)
                                  .WithMany()
                                  .HasForeignKey(c => c.CommentMemberID)
                                  .WillCascadeOnDelete(false);
}

关于entity-framework - EF Code 一、如何实现从一张表到另一张表的两个外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698233/

相关文章:

entity-framework - 如何拦截 SELECT 查询

asp.net - Entity Framework CTP5,代码优先。多对多级联删除

c# - Entity Framework 代码优先 - 来自同一张表的两个外键

c# - Code First from Database - 无法将 NULL 值插入列 'Id',但值实际上不为 null

entity-framework - Entity Framework 4.1 Code First - 仅使用数据注释定义多对多

c# - Entity Framework 4.1 Code First 和一对多映射问题

c# - 如果主键设置为自动增量,如何使用 Entity Framework 进行检查?

c# - ASP.NET 添加迁移 'composite primary key error' 如何使用 Fluent API

entity-framework - DBContext DBSet 查询和无跟踪选项

sql-server - 有没有一种方法可以仅覆盖 Entity Framework 中的删除存储过程