Как настроить несколько классов UnitOfWork для нескольких баз данных? - PullRequest
0 голосов
/ 01 сентября 2011

Я использую Entity Framework (сначала код), репозитории и шаблон единиц работы, в основном, как описано здесь: Entity Framework 4 CTP 4 / CTP 5 универсальный шаблон репозитория и тестируемый модуль

Я также использую StructureMap для управления экземплярами своего объекта, и у меня есть некоторый код, подобный этому, для соединения EF dbcontext и единицы работы:

    For<DbContext>().HybridHttpOrThreadLocalScoped().Use<MyDbContext>();
    For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();

У меня также есть универсальный Repository<T>, которыйв настоящее время знает об экземпляре MyDbContext.Теперь мне нужно иметь возможность поддерживать несколько баз данных и, следовательно, несколько DbContexts.Я рассматриваю попытку изменить IUnitOfWork вместо IUnitOfWork<T>, где T - это DbContext для использования.Но моему хранилищу также нужно будет знать, какой DbContext использовать, поэтому я должен сделать его дважды универсальным (например, Repository<TEntity,TDbContext>)?

Какой самый лучший и простой способ поддержки нескольких баз данных с использованиемЯ использую шаблон UnitOfWork?

1 Ответ

0 голосов
/ 01 сентября 2011

Это зависит от логики вашего приложения. Собираетесь ли вы вносить изменения в несколько баз данных с помощью одной единицы работы? Если да, вам все равно следует использовать одну единицу работы с фабрикой баз данных для каждой базы данных, к которой осуществляется доступ в этой единице работы. Для фиксации этой единицы работы следует использовать TransactionScope, чтобы вносить изменения во все базы данных атомарно (это может быть немного сложнее).

Если вам всегда нужно вносить изменения только в одну базу данных, вы можете использовать единую универсальную единицу работы, но вам также нужно реализовать универсальный Get на фабрике баз данных. Передача типа контекста в хранилище не требуется. Переместите логику инициализации в конкретные репозитории, которые знают тип контекста, который они должны использовать, и они запросят фабрику базы данных об этом контексте.

...