6
我有两个被链接n-n
表。我有一个方法需要一个对象并保存。如何附加包含n到n关系的对象?
public int Save(Table1 element)
{
using (var database = new Entities())
{
if (element.ID == 0)
{
database.Table1.AddObject(element);
}
else
{
database.Attach(element); //
database.ObjectStateManager.GetObjectStateEntry(element).SetModified();
database.Refresh(RefreshMode.ClientWins, element);
}
return database.SaveChanges();
}
}
当我不尝试修改obj1.Table2
它重视并成功扑救。但是,如果我试图修改此EntityCollection
element.Table2.Add(tb2);
和保存,我得到以下错误:
An object with a temporary EntityKey value cannot be attached to an object context.
在线路:database.Attach(element);
我怎样才能解决这个问题?
数据库:
Table 1 Table 2
ID | Name ID | Name
--------- -------------------
1 | One 1 | Related to One
2 | Two 2 | Related to One
3 | Three
Table 3
Tb1 | Tb2
---------
// 1 | 1
// 1 | 2
创建Table1
对象:
var element = GetTable1Obj(1);
element.Table2.Add(GetTable2Obj(1)); // GetTable2Obj uses a separated context
element.Table2.Add(GetTable2Obj(2)); // like Save method to return the object
provider.Save(element); // Method above
你是如何创建TB2?你在哪里打电话给Table2.Add(tb2)? – 2011-03-03 14:25:33
@Ladislav,一种创建上下文并返回对象的方法。 'GetTable2Obj(ID)'='使用(VAR数据库...){返回database.Table2.Where(O => o.ID == ID).FirstOrDefault(); }' – BrunoLM 2011-03-03 14:40:45
但是你添加的代码不应该附加元素。它应该使用AddObject,因为Id被设置为0.无论如何M:N与分离的实体是痛苦的。在这里查看我的回答:http://stackoverflow.com/questions/3635071/update-relationships-when-saving-changes-of-ef4-poco-objects/3635326#3635326 – 2011-03-03 14:46:26