使用实体框架保存更改会导致分离的实体重复
我正在制作一个调查程序,其中列出了作为实体从数据库中提取的问题列表。 在调查过程中,可以编辑实体的属性,但我不希望这些更改持久存在数据库中。 因此,在将它们加载到dbcontext
并通过字典访问它们后,我将它们分离出来。
当我尝试保存对数据库的答案时出现问题。 由于答案实体与问题实体(已被分离)相关,因此将一个全新的问题实体添加到数据库中。 我不确定为什么会出现这种情况,因为添加的答案实体包含分离实体的正确ID(当我在调试器中查看它时)。 但是,保存更改后,它会更新为新创建的重复实体的ID。
有没有办法阻止这种行为? 或者,有没有方法可以对实体进行更改,而且即使在上下文中调用SaveChanges
以便向数据库写入答案或日志条目时,也不会将它们保存到数据库中?
这是加载的代码,然后解决问题(项目):
public FixedLengthBlockElementRuntime(FixedLengthBlock block, RuntimeContext context) : base(block, context)
{
this._items = ((FixedLengthBlock)this.Element).ItemBank.Items.OfType<FixedLengthItem>().ToDictionary(x => x.ItemName, x => x);
foreach(FixedLengthItem fixedLengthItem in this._items.Values)
{
this.Context.DetachEntity(fixedLengthItem);
}
}
这里是添加重复条目的代码:
public void SetResponse(Response response)
{
response.Session = this.Session;
this.DbContext.Responses.AddObject(response);
this.DbContext.SaveChanges();
}
请注意,响应具有适当的ItemId,直到保存更改。
您可以将您的问题DbSet上的MergeOption设置为OverwriteChanges。
Context.Questions.MergeOption = MergeOption.OverwriteChanges;
您需要确保您在查询问题之前设置了该功能,以使其正常工作。
有关MergeOptions如何工作的更多信息
链接地址: http://www.djcxy.com/p/5735.html上一篇: Saving changes with Entity Framework causes detached entity duplicate