2010-12-14 8 views
3

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

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

В каждом случае нам нужно добавить пользовательские таблицы AND/ИЛИ добавить настраиваемые поля к существующим объектам. У нас был хороший способ сделать это с использованием предыдущих технологий, в которых библиотеки основных классов не были загружены с помощью пользовательских таблиц и т. Д. Мы просто унаследовали от основной сущности (эквивалентной 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); 
    } 
    } 

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

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

+0

У вас есть способ сделать это? – frabiacca

ответ

0

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

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