我正在为EF4 Fluent架构编写IRepository
和IUnitOfWork
包装器。
在此设计中,每个应用程序生命周期创建一次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
已创建。
是否有一种更有效的方法来管理我忽略的连接?
答案 0 :(得分:0)
仅需要连接本身来识别ADO.NET提供程序和清单令牌。 Build
方法重载了接受DbProviderInfo
实例的版本。过载接受DbConnection
在内部调用此重载。因此,如果您不喜欢DbProviderInfo
的版本,则可以直接使用DbConnection
调用该版本。
如果您知道以后需要其他ORM,请不要使用EF。设计应用程序以支持多个ORM只有在您了解所有这些应用程序并以其仅使用它们之间的共享功能的方式设计应用程序时才有可能。恕我直言支持多于一个ORM永远不需要和替换ORM总是意味着改变应用程序。