在Entity Framework中使用DbModelBuilder时如何管理连接?

时间:2011-11-20 00:11:36

标签: c# entity-framework-4.1 connection-pooling irepository

我正在为EF4 Fluent架构编写IRepositoryIUnitOfWork包装器。

在此设计中,每个应用程序生命周期创建一次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 个答案:

答案 0 :(得分:0)

仅需要连接本身来识别ADO.NET提供程序和清单令牌。 Build方法重载了接受DbProviderInfo实例的版本。过载接受DbConnection在内部调用此重载。因此,如果您不喜欢DbProviderInfo的版本,则可以直接使用DbConnection调用该版本。

如果您知道以后需要其他ORM,请不要使用EF。设计应用程序以支持多个ORM只有在您了解所有这些应用程序并以其仅使用它们之间的共享功能的方式设计应用程序时才有可能。恕我直言支持多于一个ORM永远不需要和替换ORM总是意味着改变应用程序。