C# 在ODATA$元数据上设置命名空间

C# 在ODATA$元数据上设置命名空间,c#,namespaces,odata,asp.net-web-api-odata,C#,Namespaces,Odata,Asp.net Web Api Odata,我想更改ODATA服务公开的所有实体的名称空间 现在他们有:Core.DomainModel.Entities.Database,在使用它时有点长 我试图通过builder.Namespace=“MyModel”设置它但这没有效果 var builder = new ODataConventionModelBuilder(); builder.Namespace = "MyModel"; 然后我想我必须像这样在每个实体上设置它 builder.EntitySet<Foo>("Foo

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

现在他们有:
Core.DomainModel.Entities.Database
,在使用它时有点长

我试图通过
builder.Namespace=“MyModel”设置它但这没有效果

var builder = new ODataConventionModelBuilder();
builder.Namespace = "MyModel";
然后我想我必须像这样在每个实体上设置它

builder.EntitySet<Foo>("Foo").EntityType.Namespace = "MyModel";
但这也不包括一切。我注意到枚举、ComplexTypes和一些实体没有获得正确的名称空间…:/

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

在每个实体上设置名称空间是正确的,生成器。名称空间用于容器的名称空间,而不是每个实体。

一个解决方案是从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属性来确定要为每个实体配置的名称空间。但是,您可以做各种事情来确定要使用的名称空间

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);
    }
}