1

我正在为 EF4 Fluent 模式编写一个IRepositoryIUnitOfWork包装器。

在此设计中,DbCompiledModel每个应用程序生命周期创建一次(如 NHibernate ISessionFactory)。和 all 一样,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一个新的DbContextnew DbContext(connection, compiledModel, true)

所以我面临两种选择:要么DbConnection在整个应用程序生命周期中共享一个,要么DbConnection为模型构建过程创建一个短期的,以及一个新的DbConnection每当DbContext创建一个。

有没有更有效的方法来管理我忽略的连接?

4

1 回答 1

0

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

如果您知道以后需要另一个 ORM,请不要使用 EF。只有预先了解所有 ORM 并以仅使用它们之间共享功能的方式设计应用程序,才能设计支持多个 ORM 的应用程序。恕我直言,永远不需要一个以上的 ORM,替换 ORM 总是意味着对应用程序的更改。

于 2011-11-20T11:00:22.907 回答