Как управлять соединениями при использовании DbModelBuilder в Entity Framework?
Я пишу IRepository
а также IUnitOfWork
оболочка для схемы EF4 Fluent.
В этом дизайне DbCompiledModel
создается один раз за жизненный цикл приложения (как NHibernate ISessionFactory
). DbCompiledModel
ожидает существующее соединение с базой данных, как и все DbContexts
,
Это DbCompiledModel
завод:
public class DbCompiledModelFactory
{
public static DbCompiledModel Build(
string mappingAssembly, DbConnection connection)
{
DbModelBuilder modelBuilder = new DbModelBuilder();
AddMappingsFromAssembly(modelBuilder, mappingAssemblyName);
DbModel model = modelBuilder.Build(connection);
return model.Compile();
}
}
Однажды DbCompiledModel
создан, новый DbContext
может быть создан с помощью new DbContext(connection, compiledModel, true)
Поэтому я сталкиваюсь с двумя вариантами: либо поделиться одним DbConnection
через весь жизненный цикл приложения или создать недолговечный DbConnection
только для процесса построения модели и нового DbConnection
всякий раз, когда DbContext
создано.
Есть ли более эффективный способ управления соединениями, которые я пропустил?
1 ответ
Само соединение требуется только для идентификации провайдера ADO.NET и токена манифеста. Build
метод перегружен принятием версии DbProviderInfo
пример. Эта перегрузка внутренне вызывается принятием перегрузки DbConnection
, Таким образом, вы можете назвать версию с DbProviderInfo
непосредственно, если вам не нравится тот, с DbConnection
,
Не используйте EF, если вы знаете, что вам понадобится еще один ORM позже. Разработка приложения для поддержки нескольких ORM возможна только в том случае, если вы знаете все из них uppfront и разрабатываете свое приложение так, чтобы оно использовало только общие для них функции. IMHO поддержка более чем одного ORM никогда не нужна, и замена ORM всегда означает изменения в приложении.