2014-11-06 117 views
1

我有两个实体(个案和人)与关系表上的额外数据字段(CasePerson与PersonType)的多对多关系。实体框架 - 与主键和复合外键多对多

public class Case { 
    public int Id; 

    public List<CasePerson> CasePeople; 
} 

public class Person { 
    public int Id; 

    public List<CasePerson> CasePeople; 
} 

public class CasePerson { 
    public int Id; 
    public int CaseId; 
    public int PersonId; 
    public string Type; 

    public Person Person; 
    public Case Case; 
} 

我想在关系表上创建一个组合键,这样一个人与一个案例的配对是唯一的。我还想在CasePerson表上保留一个单独的主键,以便通过我的Web API控制器进行操作。 EF或Fluent API有没有在这个CasePerson表上定义两个键的方法?

+1

[创建复合关键实体框架]的可能重复(http://stackoverflow.com/questions/14873169/creating-composite-key-entity-framework) – 2014-11-06 19:53:35

+0

我没有试图将复合关键字作为外部关系的关键;相反,我试图保证组合{CaseId,PersonId}对每个CasePerson都是唯一的。我知道我可以将它作为复合主键,但我不想从CasePerson中删除已存在的主键ID。 – user3897692 2014-11-06 20:36:17

+0

我可以通过向CaseId添加'[Index(“IX_CasePerson”,1,IsUnique = true)]'来实现此目的。这个独特的索引强制列配对是唯一的。 – user3897692 2014-11-07 20:29:24

回答

0

我能够加入
[Index("IX_CasePerson", 1, IsUnique=true)]

,将personId和

[Index("IX_CasePerson", 2, IsUnique=true)]

到CaseId做到这一点。这个独特的索引强制列配对是唯一的。