Расширение Core Edmx, несколько Edmx в EF4 - PullRequest
3 голосов
/ 15 декабря 2010

У нас есть EF4 EDMX, который содержит ~ 300 сущностей, которые используются в нашем основном наборе продуктов (сущности, импортированные из базы данных).

Когда мы получаем новых клиентов, они чаще всего хотят хранить дополнительную информациюи мы разрабатываем нестандартные процессы, которые находятся за пределами нашей бизнес-сферы и полностью индивидуальны.Например, мы заключили договор с охранной компанией, и они хотели хранить информацию об их уровнях безопасности и иметь процессы, которые действуют на этих уровнях.

В каждом случае нам нужно добавлять пользовательские таблицы И / ИЛИ добавлять настраиваемые поля всуществующие объекты.У нас был хороший способ сделать это с предыдущей технологией, в которой библиотеки базовых классов не были объединены с пользовательскими таблицами и т. Д. Мы просто унаследовали базовую сущность (эквивалентную EntityObject в EF) в пользовательской библиотеке классов и добавили настройки по мере необходимости.

Точно так же мы не хотим добавлять эти пользовательские таблицы и атрибуты в наше ядро ​​EDMX.Мы хотим «наследовать» ядро ​​EDMX в новом пользовательском EDMX в отдельной библиотеке классов, в которую мы можем добавить настройки.Наследование позволит нам сделать все возможное в Core EDMX, а также немного больше.

Мы используем шаблон t4 для генерации наших репозиториев на основе этого сообщения в блоге (мы не используем подход, основанный на модели):

http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx

Можем ли мы расширить EDMX так, как нам нужно?

Мы придумали одно хакерское решение - расширение метода для основных объектов, которое возвращает пользовательский объект вОтдельный EDMX, как показано ниже:

  public static class CoreEntityExtensions
  {
    public static EntityConnection EntityConnection;

    public static CustomUserEntity CustomUserDetails(this User coreUser)
    {
      ICustomUserEntityRepository customUserRepository = new CustomUserEntityRepository(EntityConnection);
      return customUserRepository.All().SingleOrDefault(u => u.id == coreUser.id);
    }
  }

Это не идеально, хотя по нескольким очевидным причинам.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 06 апреля 2011

Думаю, вам это мало поможет, но NHibernate может сделать это довольно легко.У нас тот же сценарий, что и у вас, и NH позволяет нам без проблем моделировать библиотеки DLL.

Извините, на самом деле это не ответ, а просто совет рассмотреть альтернативы для всех, кто читает это.

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