如何在Entity Framework中创建新对象时添加子关系

时间:2010-10-19 18:24:55

标签: entity-framework

我有一个实体框架项目设置。我有四个表和三个实体(“A”,“B”和“C”)。 A和B之间,A和C之间存在1:n关系,B和C之间存在n:n关系。

alt text

我使用以下代码尝试添加新的“B”实体:

A t = null;
if (this.MyA == null)
{
    t = new A()
    {
        EntityKey = this.MyAReference.EntityKey,
        AId = (Guid)this.MyAReference.EntityKey.EntityKeyValues[0].Value
    };
}
else
{
    t = this.MyA;
}
this.MyA = null;
context.Attach(t);
this.MyA = t;

“B”对象(“t​​his”)具有“C”对象的子集合。这些“C”对象已经存在于数据库中,但与新对象无关(显然)。当我调用“SaveChanges()”时,它会抛出异常,因为它试图将所有子“C”对象添加到数据库中的新对象。

如何才能在“Table_JoinBC”中创建引用,而不是尝试重新创建“C”对象?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果您使用stub entities

,则会更容易

您声明要添加新的B对象。要添加B对象,您需要一个A对象

以下是使用存根实体的示例:

A myAObject = new A { A_Id = 5 };

Context.AttachTo("Aes", myAObject);

B myBObject = new B { B_ID = 6, A = myAObject);

Context.AddToBes(myBObject)
Context.SaveChanges();

答案 1 :(得分:1)

以下是我使用子集合开展的工作:

A myAObject = new A { A_Id = 5 };

Context.AttachTo("Aes", myAObject);

B myBObject = new B () { 
    B_ID = 6, 
    A = myAObject};

foreach( C c_obj in CsCollection){
    Context.AttachTo("Cs", c_obj);
    myBObject.C.Add(c_obj);
}


Context.AddToProducts(myBObject)
Context.SaveChanges();

感谢。