WEB API OData乐观并发|使用ETag代替TimeStamp

时间:2018-01-31 11:18:30

标签: entity-framework-6 asp.net-web-api2 odata

上下文

要启用Optimistic Concurrency,使用Entity Framework 6对客户数据模型进行了以下更改。

之前,没有TimeStamp

public class Customer
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

之后,TimeStamp

public class Customer
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    [Timestamp]
    public byte[] Version { get; set; }
}

结果

基于此更改,WEB API在OData服务的响应中引入了ETag。

之前,没有TimeStamp

{
"@odata.context":"http://localhost:50378/$metadata#Customers/$entity",
"Id":"c16883eb-3f4b-3515-9151-caa1c9e5bfc8",
"Name":"TestSeed"
}

Afer,TimeStamp

{
"@odata.context":"http://localhost:50378/$metadata#Customers/$entity",
"@odata.etag":"W/\"YmluYXJ5J0FBQUFBQUFBQjlrPSc=\"",
"Id":"c16883eb-3f4b-3515-9151-caa1c9e5bfc8",
"Name":"TestSeed",
"Version":"AAAAAAAAB9k="
}

问题

由于WEB API在响应中引入了Etag字段, 如何隐藏响应中的Version属性?

在客户端,所有内容都通过ETag进行管理。 它仅在服务器上,在数据访问层中,使用Version属性。

隐藏Version属性背后的基本原理是将我们的OData服务的外部用户暴露给属性,仅用于商业目的。

我错过了一些基本的东西

1 个答案:

答案 0 :(得分:-2)

如果您不需要版本字段,只需将注释放在其他字段中

public class Customer
{  
    [TimeStamp]
    public Guid Id { get; set; }
    public string Name { get; set; }
}