Entity framework 4 实体框架4.0与Sql Compact Edition 4.0性能问题
我有一个带有EF模型的web应用程序,我最初是使用SQLServer2008后端设计的。后来,我决定使用SQLCE实现可移植性,因此我将模型转换为目标SQLCE4.0。但是,我在运行此应用程序时遇到了严重的性能问题 例如,我在代码中有一部分从数据库检索实体:Entity framework 4 实体框架4.0与Sql Compact Edition 4.0性能问题,entity-framework-4,sql-server-ce,Entity Framework 4,Sql Server Ce,我有一个带有EF模型的web应用程序,我最初是使用SQLServer2008后端设计的。后来,我决定使用SQLCE实现可移植性,因此我将模型转换为目标SQLCE4.0。但是,我在运行此应用程序时遇到了严重的性能问题 例如,我在代码中有一部分从数据库检索实体: Trace.Write("Retrieving node from database", "Application"); var name = value.ToString(); var no
Trace.Write("Retrieving node from database", "Application");
var name = value.ToString();
var node = DataContext.Entities.Nodes
.SingleOrDefault(n => n.Name == name);
Trace.Write("Node retrieved from database ", "Application");
当我查看跟踪信息(trace.axd)时,这些代码行需要0.6秒的时间
跟踪信息
Category Message From First(s) From Last(s)
Application Retrieving node from database 0.00057591118424269 0.000576
Application Node retrieved from database 0.595122564460008 0.594547
在我的应用程序中,这种情况随处可见,我按名称进行查询
有什么想法吗?我猜我必须在列上定义一个索引,但是在EF模型中我该怎么做呢
编辑:Gramma
编辑2:标题中的拼写我过去使用过较旧版本的SQL CE,我发现一个主要瓶颈是打开连接
您可以尝试自己管理打开的连接,并手动将其传递到数据上下文中(而不是允许上下文自动管理连接)。我过去使用过较旧版本的SQL CE,我发现一个主要瓶颈是打开连接
您可以尝试自己管理打开的连接,并手动将其传递到数据上下文中(而不是允许上下文自动管理连接)。我这里有一个示例,其中包含一些性能建议,使用global.asax:和其他性能提示:我这里有一个示例,其中包含一些性能建议,在这里使用global.asax:和其他性能提示:hmm,很有趣。。。现在,我的当前意图是允许此应用程序随时切换到SQL Server(通过更改连接字符串)。在这种情况下,应用程序会受到怎样的影响?您只需要确保在打开到其他源的新连接之前关闭所有打开的连接。嗯,很有趣。。。现在,我的当前意图是允许此应用程序随时切换到SQL Server(通过更改连接字符串)。在这种情况下,应用程序会受到怎样的影响?在打开到其他源的新连接之前,您只需要确保关闭所有打开的连接。如果有人无意中发现了这一点,@ErikEJ建议添加
connection.open()
到应用程序启动()
会有很大帮助!最后,我添加了一个条件来检查应用程序是否正在使用SqlCe:`if(((EntityConnection)DataContext.Entities.Connection).StoreConnection.GetType().Name==“SqlCeConnection”)DataContext.Entities.Connection.Open()`我也遇到了同样的问题,connection.Open()助手解决了这个问题。如果有人无意中发现了这个问题,@ErikEJ建议将connection.Open()
添加到Application\u Start()
中,这对我帮助很大!最后,我添加了一个条件来检查应用程序是否正在使用SqlCe:`if(((EntityConnection)DataContext.Entities.Connection).StoreConnection.GetType().Name==“SqlCeConnection”)DataContext.Entities.Connection.Open()`我也遇到了同样的问题,connection.Open()助手解决了这个问题。