问题描述
|
我在
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或在已添加的实体中引用更改时,更改将添加到上下文中。