我有一个实体框架项目设置。我有四个表和三个实体(“A”,“B”和“C”)。 A和B之间,A和C之间存在1:n关系,B和C之间存在n:n关系。
我使用以下代码尝试添加新的“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”对象(“this”)具有“C”对象的子集合。这些“C”对象已经存在于数据库中,但与新对象无关(显然)。当我调用“SaveChanges()”时,它会抛出异常,因为它试图将所有子“C”对象添加到数据库中的新对象。
如何才能在“Table_JoinBC”中创建引用,而不是尝试重新创建“C”对象?
感谢您的帮助。
答案 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();
感谢。