我正在制作一个调查程序,其中包含从数据库中作为实体提取的问题列表。在调查过程中,可以编辑实体的属性,但我不希望这些更改持久存储到数据库中。因此,我将这些问题加载到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();
}
请注意,在保存更改之前,Response具有正确的ItemId。
答案 0 :(得分:1)
您可以将问题DbSet上的MergeOption设置为OverwriteChanges。
Context.Questions.MergeOption = MergeOption.OverwriteChanges;
您需要确保在对问题进行查询之前将其设置为正常工作。
关于MergeOptions如何运作的