我有两个链接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);
然后保存,我收到以下错误:
具有临时EntityKey值的对象无法附加到对象上下文。
在行: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
答案 0 :(得分:2)
如果您的实体框架工作模型设置为这样,您应该能够修改t1或t2而不会出现问题。而仍然保持
从示例中的表3的外观来看,您没有条目的键。 修改实体对象时会出现问题。您的DB Fk设置为什么。