【问题标题】:EF Code First, how can I achieve two foreign keys from one table to other table?EF代码一,如何实现一张表到另一张表的两个外键?
【发布时间】:2013-12-28 21:04:47
【问题描述】:

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

成员表: ID 姓名 评论表: ID 评论 评论成员ID 评论会员ID

而且,数据应该如下所示:

成员 身份证名称 1 迈克 2约翰 3 汤姆 注释 ID 评论 CommentedMemberID CommentMemberID 1 好 1 2 2 好 1 3 3 坏 2 1

然后,我编码如下:

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 评估,所以可以'不要重现相同的错误)。

我也尝试在TestContext 上使用OnModelCreating,但找不到任何好的说明,不知道该怎么做。看了一篇EF Code First CTP3的博文,貌似那个版本有一个RelatedTo属性,现在没了。

有人知道如何让它正常工作吗?或者在这种情况下这是完全错误的方式吗?

谢谢,

【问题讨论】:

    标签: entity-framework code-first


    【解决方案1】:

    这是一种特殊情况,您需要使用 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);
    }
    

    【讨论】:

    • 非常感谢。那成功了!我会看一下fluent API,因为仍然不明白它是如何工作的:)
    猜你喜欢
    • 2019-06-22
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2012-12-31
    相关资源
    最近更新 更多