Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 只读搜索功能。使用POCOs和Ef 4.0的存储过程或IQueryable_Entity Framework_Linq To Entities_Plinq - Fatal编程技术网

Entity framework 只读搜索功能。使用POCOs和Ef 4.0的存储过程或IQueryable

Entity framework 只读搜索功能。使用POCOs和Ef 4.0的存储过程或IQueryable,entity-framework,linq-to-entities,plinq,Entity Framework,Linq To Entities,Plinq,我们有一些搜索功能,可以从数据库返回数以万计的结果,尽管它只获取需要显示到前10条记录中的行。当请求下一页时,我们再次点击数据库。它根据一组变量搜索我们的数据库,然后可以优化此搜索,这将导致另一个数据库命中。这个查询相当复杂 我们一直在寻找适合我们整体架构的不同方法 第一种方法是使用存储过程,可能是填充实体列表。这个存储过程可能很快变得庞大而笨拙,但会有更好的性能 第二种方法是将Linq用于Entity Framework 4.0中的Entity或Entity SQL,在我们的概念层的代码中创建

我们有一些搜索功能,可以从数据库返回数以万计的结果,尽管它只获取需要显示到前10条记录中的行。当请求下一页时,我们再次点击数据库。它根据一组变量搜索我们的数据库,然后可以优化此搜索,这将导致另一个数据库命中。这个查询相当复杂

我们一直在寻找适合我们整体架构的不同方法

第一种方法是使用存储过程,可能是填充实体列表。这个存储过程可能很快变得庞大而笨拙,但会有更好的性能

第二种方法是将Linq用于Entity Framework 4.0中的Entity或Entity SQL,在我们的概念层的代码中创建查询,并通过IQueryable填充POCO对象。这对我们有以下好处:

  • 抽象:我们正在应用程序的其他位置使用EF,因此我们希望 如果需要,搜索抽象模型 可能
  • 类型安全我们可以在iQueryEnable上链接过滤器,以对象化的方式干净地完成我们想要做的事情
我们对这种方法的主要关注点是性能。我们希望将Parrlel LINQ用于实体,并能够在需要时投入更多硬件。对于更清洁的开发模式来说,一个小的性能影响是可以的


我们希望听到人们对此的想法和建议。。。。我们对许多此类技术都是新手,因此希望听到人们的体验。

您说过,最终目标是性能。这对我来说意味着ADO.NET和直接SQL。在上面添加EF对于不需要状态跟踪、不需要更新功能、甚至不会使用所有结果的东西来说是一个巨大的开销

针对数据库编写SQL,并让它尽可能多地进行分页。当你打算扔掉1000个条目时,千万不要把它们拿出来。您也不能利用EF的服务器功能进行FTS或索引提示优化。您受EF运行时的支配,它是通用的,不知道如何利用特定的硬件或服务器


您还应该查看一些缓存层,您知道用户将在一定时间内查询下一个集合。获得2倍的初始结果并缓存后半部分以备他们回拨时使用更便宜。否则你会在某个时候终止它们。

你说过最终目标是性能。这对我来说意味着ADO.NET和直接SQL。在上面添加EF对于不需要状态跟踪、不需要更新功能、甚至不会使用所有结果的东西来说是一个巨大的开销

针对数据库编写SQL,并让它尽可能多地进行分页。当你打算扔掉1000个条目时,千万不要把它们拿出来。您也不能利用EF的服务器功能进行FTS或索引提示优化。您受EF运行时的支配,它是通用的,不知道如何利用特定的硬件或服务器


您还应该查看一些缓存层,您知道用户将在一定时间内查询下一个集合。获得2倍的初始结果并缓存后半部分以备他们回拨时使用更便宜。否则,它们会在某个时候过期。

我已经做了一些性能测试,使用EF4.0中的存储过程填充实体或复杂类型在性能上与通过ADO.NET访问的SP几乎相同,因此我们将尝试此方法。使用EF的内置查询速度大约是原来的两倍,因此我们将在这种性能危急的情况下使用SPs。

我做了一些性能测试,在EF4.0中使用存储过程填充实体或复杂类型在性能上与通过ADO.NET访问的SP几乎相同,因此我们将尝试这种方法。使用EF的内置查询速度大约是原来的两倍,所以我们将在这种性能危急的情况下使用SPs。

是的,我们将返回一组结果,而不是全部结果,并实现一个缓存层。我们将做一些性能测试来比较结果。我们将在EF中使用POCO,使EF的占地面积尽可能小——尽管我知道这可能仍然很大。当然会慢一点,不过好看看有多少!是的,我们肯定会返回一组结果,而不是全部结果,并实现一个缓存层。我们将做一些性能测试来比较结果。我们将在EF中使用POCO,使EF的占地面积尽可能小——尽管我知道这可能仍然很大。当然会慢一点,不过好看看有多少!