2015-03-31 88 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屬性來確定爲每個實體配置什麼名稱空間。但是,您可以做各種事情來確定要使用的名稱空間。

相關問題