我在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 :(得分:1)
避免不需要的对象而不必处理上下文的另一个选择是在使用Detach()
将更改提交到数据库后手动分离它们:
您可以从对象中分离对象 他们不再是上下文 需要。为此,请调用Detach 方法。这减少了 使用的记忆。
context.Detach(yourEntity);
请注意相关实体,如果您的实体有相关对象,相关实体将不会自动分离。
答案 1 :(得分:0)
在删除这些更改之前,所有更改都将保留在上下文中。不成功的保存不会取消更改。 CreateMyEntity是什么意思?当您使用AddObject
或在已添加的实体中引用更改时,更改将添加到上下文中。
答案 2 :(得分:0)
如果出现问题(例外) - 你必须处理上下文(因为它已经错了)并重新开始:创建新的datacontext,获取所需的数据,创建新的实体等......
P.S。:或者您可以修复问题并保存上下文。