我知道这个问题与某些问题类似,但是我的设置与其他问题有所不同。 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”中无效。由于从属角色属性不是关键属性,因此从属角色多重性的上限必须为'*'。
答案 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上进行额外配置即可工作,因为:
按照惯例,在以下情况下会为您引入备用密钥 您确定一个不是主键的属性作为目标 关系。