我有三个类,如下所示(这是我的方案的一个例子) -
public class A
{
public int Id {get; set;}
public virtual C c {get; set;}
}
public class B
{
public int Id {get; set;}
public virtual C c {get; set;}
}
public class C
{
public int AId {get; set;}
public int BId {get; set;}
public virtual A a {get; set;}
public virtual B b {get; set;}
}
AId和BId是来自各个表的外键。由于A和B之间以及A和C之间存在一对一的关系,我将模型构建器配置为 -
modelBuilder.Entity<C>().HasRequired(p => p.A).WithRequiredDependent(k => k.C);
modelBuilder.Entity<C>().HasRequired(p => p.B).WithRequiredDependent(k => k.C);
现在,每当我尝试将更改保存到C时,我都会遇到像 -
这样的错误 "Referential integrity constraint violation. A Dependent Role has multiple principals with different values."
Info1 :在我的情况下,A:Id是databasegeneratedoption.identity的主键。 B:Id是databasegeneratedoption.none的主键。
Info2 :我尝试将WithRequiredDependent更改为WithOptional,但这也不起作用。
这里有什么问题?
如下所示,我从C中删除了AId,BId列,但后来又开始收到此错误 -
"A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'Id'."
上面提到了什么'Id'栏?
答案 0 :(得分:0)
尝试从C中删除属性AId和BId,关联就足够了。
答案 1 :(得分:0)
您应该明确标记外键:
public class C
{
[ForeignKey("A")]
public int AId {get; set;}
[ForeignKey("B")]
public int BId {get; set;}
public virtual A a {get; set;}
public virtual B b {get; set;}
}
答案 2 :(得分:0)
我收到同样的错误,但原因不同。我有一个儿童班(学生)的集合,它也是另一个实体的集合(我有两个学生集合的课程)。
无论我如何注释外键,我都会收到&#39; 参照完整性约束违规。依赖角色具有多个具有不同值的主体。错误&#39 ;.对我来说唯一的解决方案是从第二个实体中删除学生集合。