【问题标题】:Entity Framework search实体框架搜索
【发布时间】:2012-09-20 01:37:45
【问题描述】:

我目前有一个搜索功能,可让我向下筛选产品,以获得多种组合。

例如,我可能会从所有产品开始,然后按类别或热门商店进行选择 - 每次选择过滤器时,它都会简单地处理数据,显示每种过滤器的总数以及仍然可用的可能选择。用户可以多次执行此操作以获得最终列表。

我是第一次使用 EF,搜索将有大约 10k 产品开始。

使用 EF 与 Linq2Sql 或 SP 的主要区别在于,它不仅获取数据,而且同时实现它们,虽然抓取页面数据需要 60 毫秒,但 10k 产品需要 4 秒。虽然这听起来不是很多,但我不能每次用户刷新搜索时都这样做。

我可以缓存数据,但这确实在一定程度上限制了应用程序的上限或服务器群,尽管它现在符合要求。

但是,我想知道除了创建定制 SP 之外是否还有更好的方法来实现这一目标。我不想使用 javascript,因为它是网站运行的基础。

有人有什么想法吗?

【问题讨论】:

    标签: .net entity-framework-4


    【解决方案1】:

    您不应该加载所有 10k 产品。如果您需要提取类别等,请单独执行,并且只提取您所在当前页面所需的数据量。这意味着所有工作都将在 SQL 服务器上完成,应用程序只能处理它需要的数据量。

    【讨论】:

    • 使用 EF 并不是那么容易。例如,一个产品可以位于多个类别中,因此我必须使用包含。我还没有找到过滤包含属性的方法。
    【解决方案2】:

    使用一些支持分页的控件。

    然后在您的选择查询中相应地使用.Skip().Take()

    【讨论】:

    • 虽然我可能会在一个页面上显示 10 个产品,但我仍然需要了解有关过滤器的详细信息,选择哪些产品仍然可以选择。
    • @user1437135:您的意思是,显示 45 个“匹配过滤条件”中的 10 个
    【解决方案3】:

    重构代码以便不需要导航属性。这将查询的表数从 3 个减少到 1 个,并提供可接受的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多