2015-09-02 3 views
2

Использование ODataConventionModelBuilder и его функции EntitySet<>, можно ли переименовать имена свойств в наборах объектов?Свойства добавления/переименования объектов в OData

Предположим, у меня есть тип набора объектов, Foo. Он имеет два свойства: Bar и Baz. Однако в моей модели OData я хотел бы, чтобы свойства вместо этого назывались Jack и Jane соответственно. Я могу сделать это?

Я надеялся на что-то вроде этого:

var builder = new ODataConventionModelBuilder { Namespace = "Blah" }; 
var foo = builder.EntitySet<Foo>("Foo"); 
foo.AliasProperty(f => f.Bar, "Jack"); 
foo.AliasProperty(f => f.Baz, "Jane"); 

До сих пор я не смог найти что-то, что это делает.

ответ

1

Да, вы можете. На основе 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"); 
foo.Property(f => f.Bar).Name = "Jack"; 
foo.Property(f => f.Baz).Name = "Jane"; 

Я был не в состоянии использовать это для навигации свойств, хотя.

0

Вы можете использовать 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]