我首先使用EF 6代码。我在数据库设计中遇到以下情况:
我有3张表,即
通过代码第一个Fluent API,我已经建立了以下之间的单向1对1映射:
当我建立学生 - 联系之间的关系时,一切都很完美。但当我添加下一个关系,即在人 - 联系之间时,我得到以下异常:
操作失败,因为表'dbo.Contacts'上已存在名称为'IX_Id'的索引或统计信息。
现在我知道,由于共享主键概念,联系人的主键是学生的FK,然后当我添加新关系时,即人员 - 联系人强制EF为人员创建新的FK,并且因为已存在导致异常的同名FK。
我想知道这种情况有没有解决办法?
我必须将联系人表分开,因为我的数据库中的许多其他表(如学生,人员,公司等)都有联系信息存储在联系人表中。因此,我还必须与联系人建立很多其他的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