【问题标题】:capturing Linq to object queries捕获 Linq 到对象查询
【发布时间】:2012-12-26 18:30:37
【问题描述】:

由于应用程序中的性能问题,我们在我的一个项目中使用内存中的方法,其中我们以通用集合的形式将所有表加载到 RAM 中(使用 nhibernate)。

问题是,当我们使用简单的 linq to sql 方法时,测试和 QA 团队可以轻松地使用他们正在查看的页面的 sql 配置文件获取 sql 查询。

但是使用新方法(内存中),我们一次性加载集合中的所有数据,然后使用 linq 从该集合中获取数据,因此测试和 QA 团队无法获取 sql 查询验证业务逻辑并验证错误。

请建议任何可以在这种情况下提供帮助的解决方案,我认为不可能将 sql 从 linq 获取到对象(因为所有数据都已经在收集中)。请建议任何可以帮助我的解决方案/方法/工具,以生成针对集合运行的那些 linq 的 sql 或任何其他好的解决方案。

注意:我知道从 linq 到 sql 中获取 sql 是不可能的,我正在寻找可以帮助我的 QA 和测试团队验证查询/业务逻辑的建议(就像他们之前通过捕获 sql 所做的那样)。如果可能的话,将 linq 查询记录为字符串,可以进一步用于运行/分析。

【问题讨论】:

    标签: sql asp.net-mvc-3 nhibernate linq-to-objects


    【解决方案1】:

    您在这种情况下运行的唯一 SQL 语句是将数据加载到内存中的初始 SELECT 查询。完成这些操作后,您将不再运行“查询”,而是执行 .NET Framework 调用。

    鉴于您已经从根本上改变了应用程序的架构,您需要将这一点传达给测试和 QA 团队 - 他们将无法以他们自己的方式“看到”应用程序现在在后台执行的操作以前可以。如果您的测试团队需要这种“深入研究”功能,那么您的架构可能需要进一步修改。

    【讨论】:

    • 您能否提供更多关于需要进一步修改的细节?
    • 这取决于您的要求。但是,要理解的关键是您现在不是针对数据库执行 SQL 语句 - 您正在对内存中的数据调用 .NET Framework 方法。
    • 我明白这件事是不可能获得 sql 的。我正在寻找任何其他机制,可以说将 linq 查询写成字符串或任何其他类型的策略。
    • 正如我之前所说,这取决于您的要求。如果您需要能够确切地向您的 QA 和测试团队展示您在引擎盖下所做的事情,那么请将源代码提供给他们。否则,您将需要写出(可能会归档)您正在执行的所有 LINQ 表达式 - 但是,这可能无法满足您的要求。
    • 即使我给出源代码,也必须教他们.net、linq和调试过程.. :)
    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多