创建EF4 EntityConnection有多贵?我正在使用SQL Compact创建一个EF4桌面应用程序,用户可以使用“文件打开”对话框打开数据库文件。然后我的代码构建一个EntityConnection,如下所示:
// Configure a SQL CE connection string
var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);
// Create an Entity Connection String Builder
var builder = new EntityConnectionStringBuilder();
// Configure Builder
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", m_EdmName);
builder.Provider = "System.Data.SqlServerCe.4.0";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();
// Create an EDM connection
var edmConnection = new EntityConnection(edmConnectionString);
我有一个ObjectContextFactory类,可以根据需要为Repository类创建对象上下文。
所以,这是我的问题:当我初始化工厂时,或者工厂是否应该在每次创建对象上下文时构建新连接时,更好的做法是构建EntityConnection吗?谢谢你的帮助。
答案 0 :(得分:3)
EF4中的开销来自我所知道的最小 - 请验证here - 基本上它归结为打开一个新的数据库连接,如果提供程序支持连接池,那么成本很小(SQL服务器会这样做)
MetadataWorkspace中的元数据是全局缓存的,因此这不会降低性能(在2009年发布链接到其他帖子的博客帖子时可能不是这样)。
配置文件中的连接字符串(该博客文章中指出的其他性能问题)都缓存在内存中,因此我无法看到它如何对性能产生负面影响。
我肯定会为每个工作单元使用新的实体连接。
答案 1 :(得分:1)
看看this blog post。似乎为每个上下文创建一个新的EntityConnection是一项昂贵的操作,也是一些主要性能问题的根源。这些性能问题的根源(在您的情况下)是连接元数据的创建。文章中提到的其他性能损失(获取连接字符串frmo配置)将不适用于您,因为您提供自己的连接字符串。在我看来,你应该创建一个EntityConnection。
要记住的一件事是,根据the documentation,EntityConnection 不保证是线程安全的。如果您要从不同的线程访问这些连接,那么您将遇到问题,最安全的解决方法是不重用EntityConnection。