Использование нескольких ObjectContexts в Entity Framework 4 с шаблоном репозитория / UOW - PullRequest
1 голос
/ 17 января 2011

Я использую EF4 и StructureMap в веб-приложении asp.net.Я использую репозиторий / единицу работы, как подробно описано в этом посте .В коде есть строка, которая делегирует настройку ObjectContext в global.asax.

EntityUnitOfWorkFactory.SetObjectContext(() => new MyObjectContext());

В коде позади веб-страницы вы можете создать общий интерфейс хранилища, например так ...

IRepository<MyPocoObject> ds = ObjectFactory.GetInstance<IRepository<MyPocoObject>>();

Мой вопрос: каков хороший подход к рефакторингу этого кода, чтобы я мог использовать более одного ObjectContext и различать их в коде?В основном у меня есть две базы данных / модели сущностей в моем приложении, и мне нужно запросить их обе на одной странице.

1 Ответ

3 голосов
/ 18 января 2011

Единица работы используется для управления постоянством в нескольких хранилищах , а не в нескольких контекстах объектов .

Вы не сможете сохранить изменения в нескольких контекстах, используя единицу работы, поскольку UoW просто реализован как оболочка для ObjectContext. Поэтому вам понадобится две единицы работ.

В целом, все станет грязно. У вас будет два обновленных OC, которые будут обрабатывать каждый HTTP-запрос, не говоря уже о том, что управление транзакциями станет кошмаром.

Должен у вас есть два ObjectContexts? В чем причина этого? Если это для масштабируемости, не беспокойтесь; это будет слишком болезненно для других вещей, таких как ваш репозиторий, единица работы и управление областью http.

Трудно дать хороший совет, не видя, как настроены ваши репозитории.

Попробуйте создать классы-оболочки для каждого контекста объекта, каждый из которых реализует IUnitOfWork и вторичный уникальный интерфейс (IEfSqlContext1 и т. Д., Представляющий одну из ваших моделей / контекстов).

Затем вы можете ввести любой контекст, какой захотите.

Как я уже сказал, старайтесь избегать двух EDMX / Контекстов. Это больше проблем, чем стоит.

...