如何在 Linq to SQL 中使用 NOEXPAND 提示?

Posted

技术标签:

【中文标题】如何在 Linq to SQL 中使用 NOEXPAND 提示?【英文标题】:How to use the NOEXPAND hint with Linq to SQL? 【发布时间】:2011-03-09 07:38:40 【问题描述】:

我有一个索引视图,我需要为其指定 noexpand 提示以使其合理执行。不幸的是,从 NOLOCK 提示修改 Linq to SQL 生成的 T-SQL 查询看来,似乎没有简单的方法可以直接利用这些提示,或者是否存在?

我的想法是允许通过使用属性或通过 dbml 以声明方式自定义这些东西是有意义的。此外,由于 Linq to SQL 似乎只针对 SQL Server 工作,因此我们也能够利用这些高级功能(如果它们存在)才有意义。尽管我对解决此问题的任何创造性方法感兴趣,但无论实施如何。

【问题讨论】:

【参考方案1】:

我找到了一种解决方法,它似乎有效,但需要为每个想要使用 NOEXPAND 提示的 SQL 视图创建第二个视图。在第二个视图中,只需从原始视图中选择所有字段并添加 NOEXPAND 提示。任何需要使用 NOEXPAND 提示的 Linq to SQL 查询现在都可以只针对包装原始视图的那个视图。

更多详情请见this MSDN post。

在创建依赖视图时要考虑的一个缺点是您必须确保以正确的依赖顺序应用创建脚本

有人有更好的选择吗?我宁愿不必为了支持使用这个必要的优化器提示而创建额外的 SQL 视图。

【讨论】:

【参考方案2】:

我完全同意,但我不相信有这样的方法。在 EF4 中,您可以使用ExecuteStoreCommand,它可以让您直接执行 SQL。如果性能不可接受,这可能是您唯一的选择。

==编辑==

您也可以在 LINQ to SQL 中通过ExecuteQuery 方法执行此操作。

http://msdn.microsoft.com/en-us/library/bb399403.aspx

【讨论】:

现在实体框架变得越来越强大,我可能会再看一下它并考虑从 Linq 切换到 SQL,但现在除非我能找到足够令人信服的理由和时间来研究这种转换然后我'我对 Linq to SQL 的解决方案更感兴趣。我将 EF4 的 ExecuteStoreCommand 功能描述为一个值得关注的有趣优势。 是的,哎呀。我现在一直在交替阅读它们! :) 我用 LINQ to SQL 更新了我的答案。打破架构模式并执行诸如执行 SQL 字符串之类的事情从来都不是一件有趣的事情,但是考虑到您已经绑定到 SQL Server,反对意见只是纯粹性而不是实用性。 在我的特殊情况下,我正在处理纯延迟和高度动态的查询,因此我认为它不包括直接执行技术,例如 ExecuteQuery。

以上是关于如何在 Linq to SQL 中使用 NOEXPAND 提示?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用方法语法在 linq to sql 中进行连接?

如何在 Linq to SQL 中使用 NOEXPAND 提示?

如何在带有 LINQ to SQL 的存储过程中使用临时表

如何在没有 Linq to SQL 的情况下在 Windows Phone 中使用 SQL Server Compact

如何在linq to sql中使用orderby和partition by获取第一行

如何使用 LINQ to SQL 连接到 SQL Server?