![](/img/trans.png)
[英]How does Entity Framework handle connections when using SqlQuery<T>
[英]How to manage connections when using DbModelBuilder in Entity Framework?
我正在為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
;而在創建DbContext
創建一個新的DbConnection
。
有沒有更有效的方法來管理我忽略的連接?
僅需要連接本身來標識ADO.NET提供程序和清單令牌。 Build
方法具有接受DbProviderInfo
實例的版本重載。 此重載由接受DbConnection
重載在內部調用。 因此,如果您不喜歡使用DbConnection
的版本,則可以直接使用DbProviderInfo
調用該版本。
如果您知道以后需要另一個ORM,請不要使用EF。 只有支持所有ORM並以僅使用它們之間共享功能的方式設計應用程序,才可以設計支持多個ORM的應用程序。 恕我直言,不再需要一個ORM來支持它,而替換ORM總是意味着對應用程序進行了更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.