2013-12-20 66 views
0

我首先使用EF 6代码。我有一个数据库设计中的下列情况:与1对1共享主键关系的问题

我有3个表,即

  • 学生
  • 联系

通过代码首先流利的API我已经建立了一个单-directional 1对1之间的映射如下:

  • 学生 - 联系
  • 人 - 联系

当我建立学生之间的关系 - 联系一切都完美的工作。但是,当我加入人之间的关系,旁边即 - 联系然后我得到了以下异常:

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

现在我知道,因为共享主键的概念的联系主键的的FK学生,然后当我添加了新的关系,即人之间 - 联系力的EF创建新的FK为,并且因为具有相同名称的FK已经存在而导致该异常。

我想知道是否有任何解决这种情况的解决方法?

我必须保持接触表分开,因为很多其他的表在我的数据库像学生,个人,公司等具有存储在接触桌子上有联系信息。所以我还必须创建很多其他1对1的关系。

+1

你可以发布架构定义吗? – Woot4Moo

+0

也许http://stackoverflow.com/a/5700825/880990有帮助。 –

回答

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