OData中实体的别名/重命名属性
使用ODataConventionModelBuilder
及其EntitySet
function,是否可以重命名实体集上的属性名称?
假设我有一个实体集类型, Foo
。 它有两个属性, Bar
和Baz
。 但是,在我的OData模型中,我希望这些属性分别命名为Jack
和Jane
。 我可以这样做吗?
我希望这样的事情:
var builder = new ODataConventionModelBuilder { Namespace = "Blah" }; var foo = builder.EntitySet("Foo"); foo.AliasProperty(f => f.Bar, "Jack"); foo.AliasProperty(f => f.Baz, "Jane");
到目前为止,我一直无法找到这样做的东西。
是的你可以。 基于https://github.com/OData/ODataSamples/blob/master/WebApi/v4/ODataModelAliasingSample/ODataModelAliasingSample/Program.cs :
var builder = new ODataConventionModelBuilder { Namespace = "Blah" }; var foo = builder.EntitySet("Foo"); foo.Property(f => f.Bar).Name = "Jack"; foo.Property(f => f.Baz).Name = "Jane";
我一直无法将其用于导航属性。
您可以使用DataContract / DataMember以明确的方式执行此操作,例如
[DataContract] public class Foo { [DataMember] public Id { get; set;} [DataMember(Name = "Jack"] public string Bar { get; set;} [DataMember(Name = "Jane"] public string Baz { get; set;} public int Fizz { get; set; } [NotMapped] public bool Buzz { get; set; }
任何没有属性或[NotMapped]的东西都不会出现在OData模型中。
好处
- 可用于任何属性类型,包括导航
- 保留元数据中类的属性顺序,更改
ODataConventionModelBuilder在模型构建之前发生,因此
你倾向于先看到你的房产
缺点
- 使用NotMapped属性可能会干扰您的数据库映射,有时可以使用没有属性意味着它不会在OData模型中的约定
这也在官方文档http://odata.github.io/WebApi/#02-04-convention-model-builder中以及[ConcurrencyCheck]和[ComplexType]等其他属性中进行了描述。
- 始终有错误“ObjectContent 1类型无法序列化响应正文…”
- container.RegisterWebApiControllers(GlobalConfiguration.Configuration)导致InvalidOperationException
- 使用ADAL C#作为机密用户/守护程序服务器/服务器到服务器 – 401未经授权
- POST StreamContent与多个文件
- UseWindowsAzureActiveDirectoryBearerAuthentication如何在validation令牌时起作用?
- Web API模型validation和默认值
- JSON.NET Parser *似乎*是双重序列化我的对象
- 为什么这个代码在通过TPL / Tasks执行时会失败?
- 如何在Asp.net Web API中使用特定的CultureInfo