Установить пространство имен в метаданных ODATA $

Я хочу изменить пространство имен всех объектов, предоставляемых моей службой 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";
}

Но и это не включает все. Я заметил, что ENUM, ComplexTypes и некоторые объекты не получили правильное пространство имен... :/

Итак, мой вопрос. Как установить пространство имен для каждой сущности?


person Snæbjørn    schedule 31.03.2015    source источник


Ответы (2)


Одним из решений является получение нового класса от 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, чтобы определить, какое пространство имен настроить для каждой сущности. Однако вы можете делать всевозможные вещи, чтобы определить используемые пространства имен.

person Jeffrey Patterson    schedule 06.09.2017

То, что вы сделали для установки пространства имен для каждого объекта, правильно, builder.Namespace предназначен для пространства имен контейнера, а не для каждого объекта.

person Fan Ouyang    schedule 14.04.2015