实体框架 - 表需要两个指向同一个表的外键

时间:2015-04-08 15:53:50

标签: c# entity-framework database-design foreign-keys ef-model-builder

我正在使用包含"Contacts" : Id, FirstName, LastName, MobileNumber等表格的数据库的现有项目。

我现在想要实现一个表格,我可以将这些联系人链接在一起。我已经构建了一个名为contactMatches: Id, contact1, contact2的类,其中contact1contact2应该作为FK链接到contactId列。我正在考虑使用实体框架Modelbuilder.Entity功能为表示类的表创建数据关系。

我对数据库设计和实体框架比较陌生。这可以在一个链接表中完成,还是需要沿着不同的路径进行?

我考虑的另一个路由是创建表,只存储contact1contact2作为整数,因为它只在交叉引用数据库中的其他表时使用。这看起来很糟糕,因为contactMatches表可能包含不存在的contactId,因此需要对此进行保护....

什么是做我想要的最好的方法,任何想法?

谢谢, JK

1 个答案:

答案 0 :(得分:0)

您可以覆盖OnModelCreating方法

modelBuilder.Entity<Contacts>()
            .HasMany(e => e.ContactMatches1)
            .WithRequired(e => e.Contact1)
            .HasForeignKey(e => e.Id);

        modelBuilder.Entity<Contacts>()
            .HasMany(e => e.ContactMatches2)
            .WithRequired(e => e.Contact2)
            .HasForeignKey(e => e.Id);

前提是ContactMatches1 + 2是Contacts类

中的导航属性
public virtual ICollection<ContactMatches> ContactMatches1 { get; set; }