我注意到由于某种原因,我既没有来自查询也没有添加ObjectContext.MySet.AddObject(myObj)的对象以某种方式附加到ObjectContext。
foreach (SomeClass someObject in someSet)
{
//it says an object is added...
MessageBox.Show(someObject.EntityState.ToString());
foreach (SomeProperty someProperty in someObject.SomeProperty)
{
//type is given above
someObject.someProperty = type;
}
var existing = from o in db.SomeObjectSet
where o.Name == someObject.Name
select o;
if (existing.Count() == 0)
{
db.SomeObjectSet.AddObject(someObject);
}
//apparently I have to detach them because
//they are already attached for some reason
else
{
db.Detach(vulnerability);
}
}
db.SaveChanges();
请注意,someSet并非来自数据库,它来自不同类型的来源,例如文本文件。
通常情况下,我永远不需要分离一个物体,因为它没有附着,但在这种情况下显然不是。
答案 0 :(得分:1)
如果将对象与已添加到上下文中的另一个对象相关联,则下次调用GetChanges时它也将等待插入(这是SubmitChanges的一部分)。这是基于我对LINQ to SQL的经验;我假设实体框架是相似的。
答案 1 :(得分:0)
No; objects are not created attached by default。在每个进程中拥有多个对象上下文是完全可以接受的(并且在ASP.NET程序中是正常的)。
我会检查代码中的其他位置,以了解实体附加的原因。