如何更改Microsoft.OData.Client.DataServiceContext中实体的状态?

时间:2018-11-03 07:15:26

标签: rest odata

在EF和EFCore中检查实体的状态时,可以执行以下操作:

Console.WriteLine(dc.Entry(entity).State);

其中dc是从DbContext派生的类的实例。实体变量是属于DbContext上定义的DbSet的对象。

要更改实体的状态,可以执行以下操作:

dc.Entry(entity).State = EntityState.Modified;

在建立Microsoft.OData世界(尤其是Microsoft.OData.Client库)时,从EF世界复制或保留了许多惯用法和语义,以允许知识的重用。不幸的是,许多事情不能完全翻译。

我正在寻找如何重复以上步骤。假设dc是Microsoft.OData.Client.DataServiceContext的实例,而实体是在dc上解析的EntitySet的一部分。我们可以执行以下操作来更改状态:

Console.WriteLine(dc.GetEntityDescriptor(entity).State);

但是我不能如下直接修改此状态:

dc.GetEntityDescriptor(entity).State = EntityStates.Modified;

该属性为只读。这意味着还有其他机制可以实现此更新,但我似乎找不到它。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

为此,您可以使用DataServiceContext.ChangeState(object entity, EntityStates state)。在您的情况下,它看起来像:

dc.ChangeState(entity, EntityStates.Modified);

特别是对于状态Modified,您也可以使用DataServiceContext.UpdateObject(object entity)。就您而言:

dc.UpdateObject(entity);

这还将设置实体状态为已修改。