Entity framework 4 实体框架4.0与Sql Compact Edition 4.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

我有一个带有EF模型的web应用程序,我最初是使用SQLServer2008后端设计的。后来,我决定使用SQLCE实现可移植性,因此我将模型转换为目标SQLCE4.0。但是,我在运行此应用程序时遇到了严重的性能问题

例如,我在代码中有一部分从数据库检索实体:

        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()助手解决了这个问题。