1对1共享主键关系的问题

时间:2013-12-20 13:44:29

标签: c# sql database entity-framework code-first

我首先使用EF 6代码。我在数据库设计中遇到以下情况:

我有3张表,即

  • 学生
  • 联系

通过代码第一个Fluent API,我已经建立了以下之间的单向1对1映射:

  • 学生 - 联系
  • 人 - 联络

当我建立学生 - 联系之间的关系时,一切都很完美。但当我添加下一个关系,即在人 - 联系之间时,我得到以下异常:

  

操作失败,因为表'dbo.Contacts'上已存在名称为'IX_Id'的索引或统计信息。

现在我知道,由于共享主键概念,联系人的主键是学生的FK,然后当我添加新关系时,即人员 - 联系人强制EF为人员创建新的FK,并且因为已存在导致异常的同名FK。

我想知道这种情况有没有解决办法?

我必须将联系人表分开,因为我的数据库中的许多其他表(如学生,人员,公司等)都有联系信息存储在联系人表中。因此,我还必须与联系人建立很多其他的1对1关系。

1 个答案:

答案 0 :(得分:0)

首先不知道实体框架或代码,我认为问题是你的表需要看起来像这样:

Contact:  
   contact_id primary_key

Person:  
    person_id primary_key
    contact_id foreign_key

Student:  
    student_id primary_key
    contact_id foreign_key

根据错误消息,您似乎正在尝试执行以下操作:

Contact:  
       contact_id primary_key
       person_student_id foreign_key -- either to Person or Student
    Person:  
        person_id primary_key
        contact_id foreign_key

    Student:  
        student_id primary_key
        contact_id foreign_key