C# 在我检查db.Entry之前,ObjectStateEntry不会更新

C# 在我检查db.Entry之前,ObjectStateEntry不会更新,c#,entity-framework,asp.net-web-api2,C#,Entity Framework,Asp.net Web Api2,我使用基于API的实体框架实现;EF对象在被发送到客户端供使用之前被转换为DTO(数据传输对象) 在返回的过程中,我将从DTO更改回实体类型;我对删除/更新调用的并发性检查有问题。我正在使用EF6和webAPI 2 发生的事情是,从数据库加载对象后,我必须在对象状态条目实际更改为“修改”之前调用db.Entry(object) 代码: 。。。然后,对ose.AcceptChanges()的调用完全符合我的预期。我的问题是,为什么我必须调用db.Entry(assetType)才能让系统看到对象已

我使用基于API的实体框架实现;EF对象在被发送到客户端供使用之前被转换为DTO(数据传输对象)

在返回的过程中,我将从DTO更改回实体类型;我对删除/更新调用的并发性检查有问题。我正在使用EF6和webAPI 2

发生的事情是,从数据库加载对象后,我必须在对象状态条目实际更改为“修改”之前调用db.Entry(object)

代码:

。。。然后,对ose.AcceptChanges()的调用完全符合我的预期。我的问题是,为什么我必须调用db.Entry(assetType)才能让系统看到对象已更改?它是否已经通过FindAsync连接到上下文,是否应该自动获取对modifyDate的更改?如果重要的话,这是带有edmx文件的db first,而不是code first

编辑:修改为包含删除API函数的完整代码

编辑2:澄清我的要求/是什么让这起作用/问题是什么。

试试这个:

AssetType assetType = await db.AssetTypes.FindAsync(id); //get object from db
assetType.ModifyDate = modifyDate; //modify it
var state = db.Entry(assetType).State; //get current state, which should be Modified
var updatedRecords = await db.SaveChangesAsync();
问题似乎是您获得的状态是在对实体进行任何更改之前。
顺便说一句,方法Remove()将一个实体标记为已删除,所以我认为这不是您想要的。

这在状态确实表示“已修改”的意义上起作用。然而,我一直在努力解决的问题是,我的意思是移除;如果数据库中的modify date字段与API接收到的匹配,我要做的是从数据库中删除对象。我将修改我的问题,使其更清楚一点-我遇到的问题是,在状态真正正确地将其自身设置为修改之前,我似乎必须调用db.Entry(assetType),而不管我如何处理调用的结果。
...
assetType.ModifyDate = modifyDate;
var state = db.Entry(assetType).State;  /* ADDED THIS LINE */
ose.AcceptChanges();
....
AssetType assetType = await db.AssetTypes.FindAsync(id); //get object from db
assetType.ModifyDate = modifyDate; //modify it
var state = db.Entry(assetType).State; //get current state, which should be Modified
var updatedRecords = await db.SaveChangesAsync();