Создание сущностного контейнера и модели в разных сборках - PullRequest
4 голосов
/ 20 января 2010

Я занимаюсь рефакторингом и пытаюсь повторно использовать мои обобщенные модели сущностей. В моем приложении есть несколько сборок, одна из которых является общедоступными типами (API), открытыми наружу, а другая содержит реализации провайдеров (таких как журнал).

Я бы хотел разделить генерацию сущностей и моделей так, чтобы сущности были в сборке API, а контейнер - в сборке реализации. Это возможно?


Возможно. Вот как я это сделал.

Вот так все изложено. Вот грубые шаги:

  1. Щелкните правой кнопкой мыши на EDMX в A (сборка общедоступного API) и добавьте файл генерации кода
  2. Добавляет TT в проект. Называется это «Модели», так как он будет содержать только модели.
  3. Отредактировал TT и удалил генерацию кода для контейнеров сущностей
  4. В сборку B (внутренние реализации) добавлен Database.EDMA в виде ссылки
  5. Открывается в сборке B, щелкните правой кнопкой мыши и добавьте файл генерации кода
  6. Добавляет TT в проект B. Называется он EntityContainer, поскольку он будет содержать только это.
  7. Отредактировал TT, чтобы сделать следующее
    • Удалены шаги создания сущности
    • Изменен путь к Database.EDMX на относительный путь, указывающий на оригинальную копию в A
    • Добавлено using для моих моделей

Надеюсь, все это скомпилируется и будет работать правильно (я все еще далек от того, чтобы все скомпилировать и протестировать). Хорошо выглядит до сих пор.


Дополнительные изменения:

В моем контейнере сущностей TT мне пришлось изменить определение EscapeEndTypeName следующим образом:

string EscapeEndTypeName(AssociationType association, int index, 
    CodeGenerationTools code)
{
    EntityType entity = association.AssociationEndMembers[index]
      .GetEntityType();
    return code.CreateFullName(
      code.EscapeNamespace(association.NamespaceName), code.Escape(entity));
}

Я использую association.NamespaceName, поскольку он содержит правильное пространство имен из другой сборки.

1 Ответ

1 голос
/ 21 января 2010

Я не знаю ответа, но я думаю, что ваш вопрос по сути эквивалентен «Возможно ли заставить шаблон T4 в одном проекте передавать код в другой проект?» Если вы можете сделать это, то вы можете делать то, что вы хотите. Обратите внимание, что это значительно проще в EF 4 .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...