【问题标题】:Issue with 1 to 1 shared primary key relationship1对1共享主键关系的问题
【发布时间】:2013-12-20 13:44:29
【问题描述】:

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

我有 3 张桌子,即

  • 学生
  • 联系方式

通过代码优先的 Fluent API,我在以下各项之间建立了单向的 1 对 1 映射:

  • 学生 - 联系方式
  • 人员 - 联系人

当我建立 Student - Contact 之间的关系时,一切正常。但是当我添加下一个关系,即 Person - Contact 之间的关系时,我得到了以下异常:

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

现在我知道,由于共享主键概念,Contact 的主键是 Student 的 FK,然后当我添加新关系时,即 之间Person - Contact 强制 EF 为 Person 创建新的 FK,因为同名的 FK 已经存在导致异常。

我想知道这种情况有什么解决方法吗??

我必须将 contact 表分开,因为我的数据库中的许多其他表(如 Student、Person、Firm 等)都将联系信息存储在联系表中。所以我还必须与联系人建立很多其他的一对一关系。

【问题讨论】:

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


【解决方案1】:

在不了解实体框架或代码的情况下,我认为问题在于您的表需要如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多