2011-06-18 46 views
2

我在Entity Framework中创建了几个实体。它们会自动添加。实体框架中的僵尸对象

问题1:MyEntity.CreateMyEntity是否正常自动将实体添加到上下文中?

现在,我想保存它们,但如果它们违反数据库约束,我会得到异常,什么都不会持久 - 正确,但 - 这些对象保留在我不想要的ObjectContext中。

我试图运行该代码为:

 
using (var t = new TransactionScope()) { 
    ...create entities... 
    try 
    { 
    context.SaveChanges(); 
    t.Complete(); 
    context.AcceptAllChanges(); 
    } 
    catch 
    { 
     MessageBox.Show("Ooops"); 
    } 
} 

,但即使我在交易中运行它,这些实体留在背景。

问题2:我错过了什么?我是否必须手动删除它们?

+0

您能否显示代码将使用MyEntity.CreateMyEntity创建的对象自动附加到上下文中的代码。 – Slauma

回答

1

另一种选择,以避免不必要的对象,而无需处置上下文是手动分开他们,你有使用Detach()提交更改到数据库后:

您可以从一个对象 背景下,当他们脱离对象不再需要 。要执行此操作,请调用分离 方法。这会减少使用的内存量。

context.Detach(yourEntity); 

小心相关实体不过,如果你的实体相关的对象相关的实体将不会自动脱落。

0

所有更改都会保留在上下文中,直到您删除这些更改。不成功的保存不会取消更改。 CreateMyEntity是什么意思?当您使用AddObject或当您在已添加的实体中引用它们时,更改将添加到上下文中。

0

如果发生错误(例外) - 你必须处理上下文(因为它已经是错误的),并开始了:创建新的datacontext,获取所需的数据,创建新的实体等..

PS:或您可以修复问题并保存上下文。