Модель данных JayData уже создана — после этого добавьте действие OData.

У меня есть служба OData Web Api, в которой я создаю контроллеры с шаблоном T4 из модели данных EF. При этом я также создаю модель данных Jaydata с T4.

Но теперь у меня есть частичный класс, который добавит действие к одному из моих контроллеров.

Поскольку файл JayData также создается с помощью шаблона T4, есть ли способ добавить действия в один из наборов EntitySet позже?


person Malyngo    schedule 25.02.2015    source источник
comment
Вы имеете в виду добавление действия в клиент во время выполнения?   -  person Peter Aron Zentai    schedule 27.02.2015
comment
@PeterAronZentai Нет. Все мои контроллеры веб-API создаются из скриптов T4, непосредственно когда я редактирую свою диаграмму данных (осязаемый файл .tasl архитектора). Я также создал сценарий T4, который будет автоматически создавать модели Jaydata. Контроллеры являются частичными классами, и теперь у меня есть случай, когда я добавляю дополнительное действие к одному контроллеру. Я знаю, как это сделать для контроллера (частичный класс), но я также хотел бы сохранить автоматическую генерацию моделей Jaydata без изменений, и в основном также хотел бы, чтобы этот частичный класс происходил в модели Jaydata.   -  person Malyngo    schedule 28.02.2015


Ответы (1)


Теперь мне удалось сделать следующее: Мой сгенерированный контекст JayData выглядит следующим образом:

$data.EntityContext.extend('myNameSpace.MyContext', {
    'Cases': { type: $data.EntitySet, elementType: myNameSpace.Case},
    // ... other Entitysets
}

Позже я расширяю этот контекст следующим образом:

myNameSpace.MyContext.extend('myNameSpace.MyExtendedContext', {
    'Cases': { type: $data.EntitySet, elementType: myNameSpace.Case, actions: {
        'Checkout': { type: $data.ServiceAction, returnType: 'myNameSpace.Case', IsBindable: true, 'EntitySet': 'Cases', IsAlwaysBindable: true, params: [{ name: 'Id', type: 'Edm.Guid' }] }
    }
}

Поэтому я могу использовать свое действие, если позже воспользуюсь своим расширенным контекстом. Я думаю, этого должно быть достаточно.

Мои определения Typescript для этого выглядят следующим образом:

declare module myNamespace {
export class CaseExtensions extends $data.EntitySet<myNamespace.Case> {
    Checkout: {
        (Id: string, handler?: (result: myNamespace.Case) => void): $data.IPromise<Case>;
        (params?: { Id?: string; }, handler?: (result: myNamespace.Case) => void): $data.IPromise<Case>;
    };
}

export class MyExtendedContext extends MyContext {
    Cases: CaseExtensions;
}
}
person Malyngo    schedule 13.03.2015