使用实体框架保存更改会导致分离的实体重复

我正在制作一个调查程序,其中列出了作为实体从数据库中提取的问题列表。 在调查过程中,可以编辑实体的属性,但我不希望这些更改持久存在数据库中。 因此,在将它们加载到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

下一篇: Fastest Way of Inserting in Entity Framework