Как управлять соединениями при использовании 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 всегда означает изменения в приложении.

Другие вопросы по тегам