Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 1对1共享主键关系的问题_C#_Sql_Database_Entity Framework_Code First - Fatal编程技术网

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

C# 1对1共享主键关系的问题,c#,sql,database,entity-framework,code-first,C#,Sql,Database,Entity Framework,Code First,我首先使用的是EF6代码。我在数据库设计中遇到以下情况: 我有三张桌子 大学生 人 联系 通过code first Fluent API,我在以下各项之间建立了单向1:1映射: 学生联络 个人接触 当我与学生建立联系时,一切都很顺利。但当我添加下一个关系,即人际关系时,我得到了以下例外: 操作失败,因为表“dbo.Contacts”上已存在名为“IX_Id”的索引或统计信息 现在我知道,由于共享主键概念,联系人的主键是Student的FK,因此当我添加新关系时,即Person-Contact之间

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

我有三张桌子

大学生 人 联系 通过code first Fluent API,我在以下各项之间建立了单向1:1映射:

学生联络 个人接触 当我与学生建立联系时,一切都很顺利。但当我添加下一个关系,即人际关系时,我得到了以下例外:

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

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

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


我必须将联系人表分开,因为我数据库中的许多其他表,如学生、个人、公司等,都有联系人表中存储的联系人信息。因此,我还必须与联系人建立许多其他1对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
根据错误消息,您似乎正在尝试执行以下操作:

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

你能发布模式定义吗?也许有帮助。