2015-03-31 71 views
3

我想更改由我的ODATA服务公开的所有实体的名称空间。

现在他们得到了:Core.DomainModel.Entities.Database这是消耗它有点长。

我试图通过builder.Namespace = "MyModel";来设置它,但是没有效果。

var builder = new ODataConventionModelBuilder(); 
builder.Namespace = "MyModel"; 

我后来想通,我不得不把它放在每一个实体,像这样

builder.EntitySet<Foo>("Foo").EntityType.Namespace = "MyModel"; 

但是很快失控,当我不得不通过每一个实体:(

然后我试过这个

foreach (var entity in builder.EntitySets) 
{ 
    entity.EntityType.Namespace = "MyModel"; 
} 

但是这并不包括所有东西我注意到ENUMs,ComplexTypes和s OME实体没有得到正确的命名空间...:/

所以我的问题是。 如何为每个实体设置名称空间?

回答

0

您在每个实体上设置名称空间所做的工作是正确的,builder.Namespace用于容器的名称空间,而不是每个实体。

0

一个解决方案是从ODataConventionModelBuilder派生一个新类,然后实现一些覆盖。

public class ODataExtendedConventionModelBuilder : ODataConventionModelBuilder 

    public override ComplexTypeConfiguration AddComplexType(Type type) 
    { 
     var x = base.AddComplexType(type); 
     x.Namespace = Namespace; 
     return x; 
    } 

    public override EntityTypeConfiguration AddEntityType(Type type) 
    { 
     var x = base.AddEntityType(type); 
     x.Namespace = Namespace; 
     return x; 
    } 

    public override EnumTypeConfiguration AddEnumType(Type type) 
    { 
     var x = base.AddEnumType(type); 
     x.Namespace = Namespace; 
     return x; 
    } 

    public override void AddProcedure(ProcedureConfiguration procedure) 
    { 
     procedure.Namespace = Namespace; 
     base.AddProcedure(procedure); 
    } 
} 

在这个例子中,我使用ODataModelBuilder.Namespace属性来确定为每个实体配置什么名称空间。但是,您可以做各种事情来确定要使用的名称空间。

相关问题