的EntityFramework。依赖角色具有多个具有不同值的主体

时间:2014-12-07 08:17:47

标签: c# asp.net-mvc entity-framework asp.net-mvc-4

我有三个类,如下所示(这是我的方案的一个例子) -

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,但这也不起作用。

这里有什么问题?

UPDATE1

如下所示,我从C中删除了AId,BId列,但后来又开始收到此错误 -

"A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'Id'."

上面提到了什么'Id'栏?

3 个答案:

答案 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 ;.对我来说唯一的解决方案是从第二个实体中删除学生集合。