由于从属角色属性不是关键属性,因此从属角色多重性的上限必须为“ *”

时间:2018-10-12 21:29:12

标签: c# .net sql-server entity-framework

我知道这个问题与某些问题类似,但是我的设置与其他问题有所不同。 EF中具有以下类别的正确配置是什么?

这里的问题是Team有一个可选的DivisionParticipant,但是DivisionParticipant也有一个可选的Team

public class Team 
{
     [Key]
     public int Id {get;set;}
     public DivisionParticipant DivisionParticipant {get;set;}
}

public class DivisionParticipant
{
     [Key]
     public int Id {get;set;}

     public int? TeamId {get;set;}
     [ForeignKey("TeamId")]
     public Team Team {get;set;}
}

错误

Team_DivisionParticipant_Target ::多重性在关系“ Team_DivisionParticipant”中的角色“ Team_DivisionParticipant_Target”中无效。由于从属角色属性不是关键属性,因此从属角色多重性的上限必须为'*'。

2 个答案:

答案 0 :(得分:1)

实现所需目标的唯一方法是:

public class Team 
{
     [Key]
     public int Id {get;set;}
     public DivisionParticipant DivisionParticipant {get;set;}
}

public class DivisionParticipant
{
     [Key, ForeignKey("Team")]
     public int Id {get;set;}

     public Team Team {get;set;}
}

每当需要一对一(或一对零或一对一)关系时,从属端(在您的情况下为DivisionParticipant)外键也应为其主键。如果您不这样做,那么您将收到此错误:

  

由于从属角色属性不是关键属性,因此从属角色多重性的上限必须为'*'。

答案 1 :(得分:0)

EF 6不支持此功能,因为EF 6不支持备用键。 EF Core可以使用。现在,除了.NET Core应用程序外,.NET Framework应用程序还可以使用EF Core。

此模型无需在EF Core上进行额外配置即可工作,因为:

  

按照惯例,在以下情况下会为您引入备用密钥   您确定一个不是主键的属性作为目标   关系。

Alternate Keys - EF Core