实体框架4:对象是否自动附加?

时间:2011-03-22 10:35:31

标签: c# .net entity-framework

我注意到由于某种原因,我既没有来自查询也没有添加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并非来自数据库,它来自不同类型的来源,例如文本文件。

通常情况下,我永远不需要分离一个物体,因为它没有附着,但在这种情况下显然不是。

2 个答案:

答案 0 :(得分:1)

如果将对象与已添加到上下文中的另一个对象相关联,则下次调用GetChanges时它也将等待插入(这是SubmitChanges的一部分)。这是基于我对LINQ to SQL的经验;我假设实体框架是相似的。

答案 1 :(得分:0)

No; objects are not created attached by default。在每个进程中拥有多个对象上下文是完全可以接受的(并且在ASP.NET程序中是正常的)。

我会检查代码中的其他位置,以了解实体附加的原因。