2011-03-22 65 views
0

我注意到,由于某种原因,我的对象既不是来自查询,也没有添加ObjectContext.MySet.AddObject(myObj)以某种方式附加到ObjectContext。实体框架4:是否自动附加对象?

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

什么是'漏洞'? 'someObjects'之间有任何关系吗? – 2011-03-22 10:45:44

+0

什么是'SomeObjectSet'? – 2011-03-22 10:51:06

+0

你能否更清楚问题是什么? – Xhalent 2011-03-22 10:53:44

回答

1

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

+0

@BlueMongMN,谢谢!我在代码中发现了一些其他地方,我添加了一个关联,导致我的*父对象变为连接到上下文。 – 2011-03-22 14:46:25

0

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

我会检查你的代码中的其他地方,看看为什么这些实体被连接。