【问题标题】:Set namespace on ODATA $metadata在 ODATA $metadata 上设置命名空间
【发布时间】:2017-09-06 12:33:23
【问题描述】:

我想更改我的 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 和一些实体没有得到正确的命名空间......:/

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

【问题讨论】:

    标签: c# namespaces odata asp.net-web-api-odata


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-01
        • 2015-05-31
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        相关资源
        最近更新 更多