【问题标题】:How to update a dbSet if the record has changed in the database?如果数据库中的记录已更改,如何更新 dbSet?
【发布时间】:2016-03-17 00:04:19
【问题描述】:

如果我检测到数据库中的一条记录已被另一个进程更改并且该记录是我当前 dbSet 的成员,我如何更新该记录以反映已更改数据库记录的数据?据我了解,如果该项目已经存在,附加将失败。

我使用内存中的大部分数据来更新屏幕上的状态并允许用户更改数据。其他进程也是如此。

我正在使用 EF7(核心),它可能不像我刚接触 EF 那样聪明。

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    您可以使用 Load() 方法从数据库中重新水化受影响的实体:

    以防万一,首先要分离你的实体

    DbContext.Entry(changed).State = EntityState.Detached;
    DbContext.MyDbSet.Where(e => e.Id == changed.Id).Load(); 
    

    如上,Load() 会将条目再次放入集合中。

    在您使用它之前,您需要导入 Microsoft.Data.Entity 命名空间

    【讨论】:

    • 为什么要先分离?我意识到我对英孚的误解很深,买了两本书,所以没有必要回应——希望我能自学!
    • 没有必要先分离,可能只有我一个人,但由于 EF 仍然是 RC,我更愿意保护自己。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多