0

我正在制作一个调查程序,其中包含从数据库中作为实体提取的问题列表。在调查过程中,实体的属性可能会被编辑,但我不希望这些更改保留到数据库中。因此,我将问题加载到 中后分离它们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。

4

1 回答 1

1

您可以将问题DbSet上的 MergeOption 设置为 OverwriteChanges。

Context.Questions.MergeOption = MergeOption.OverwriteChanges;

但是,您需要确保在查询问题之前设置它才能正常工作。

更多关于 MergeOptions 如何工作的阅读

于 2012-08-28T15:38:51.233 回答