实体框架中的僵尸对象

问题描述

| 我在
Entity Framework
中创建了几个实体。它们是自动添加的。 问题1:
MyEntity.CreateMyEntity
自动将实体添加到上下文中是否正常? 现在,我想保存它们,但是如果它们违反数据库约束,我将得到例外,则任何东西都不会保留-正确,但是-这些对象保留在我不想要的ѭ2中。 我试图以如下方式运行该代码: 使用(var t = new TransactionScope()){    ...创建实体...    尝试    {      context.SaveChanges();      t.Complete();      context.AcceptAllChanges();    }    抓住    {       MessageBox.Show(\“ Ooops \”);    } } 但是即使我在事务中运行它,这些实体仍保留在上下文中。 问题2:我想念什么?我是否必须手动删除它们?     

解决方法

        避免不必要的对象而不必释放上下文的另一种方法是,使用
Detach()
将更改提交给数据库后,手动分离它们:   您可以从对象分离对象   当它们不再存在时   需要。为此,请致电分离   方法。这减少了   使用的内存。
context.Detach(yourEntity);
但是,请注意相关实体,如果您的实体具有相关对象,则不会自动分离相关实体。     ,        如果出现问题(异常)-您必须处置上下文(因为它已经是错误的)并重新开始:创建新的数据上下文,获取所需的数据,创建新的实体等。 附注:或者您可以解决问题并保存上下文。     ,        所有更改都将保留在上下文中,直到您删除这些更改。保存失败将无法取消更改。您是什么意思CreateMyEntity?当您使用ѭ5或在已添加的实体中引用更改时,更改将添加到上下文中。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...