使用实体框架的表值函数

Posted

技术标签:

【中文标题】使用实体框架的表值函数【英文标题】:table value function using entity framework‬ 【发布时间】:2012-03-03 16:17:12 【问题描述】:

我正在使用 SQL 尝试实现全文搜索。我注意到在 Linq 中没有直接处理全文搜索。

我读到我可以使用 UDF 来返回一个表。我尝试使用它,但 EF 无法识别我的函数,尽管我确实在某处读到过新版本的 EF(4.2)应该支持 UDF。

我也尝试通过 SSDL 实现自定义函数,但问题是我无法继续过滤超出 linq 中结果行的查询,给出错误:the result of a query cannot be enumerated more than once

希望我清楚自己的问题。

您认为我应该使用的最佳方法是什么?

【问题讨论】:

为什么是 UDF,而不仅仅是存储过程?您的错误“查询的结果不能多​​次枚举”通常可以通过将结果放在List 中来解决。你试过了吗? 如果结果集有很多行(表包含超过一百万条记录),则将结果集放入列表可能会很昂贵。另外,我仍然需要使用 linq 对结果进行更多过滤,然后才选择 10 行进行渲染。 UDF 返回一个我可以用 linq 过滤的表,我认为存储过程不会返回一个你可以用 linq 操作的表。 【参考方案1】:

TVF 尚不支持,它将随 .Net 4.5 一起提供,但我认为 this 可能会对您有所帮助。您可能会考虑其他 ORM 只是为了让全文搜索正常工作(Linq2Sql 可能,它支持 TVF)。

【讨论】:

据我了解,微软已经发布了 5.0 beta 版本。但它仍然是测试版。而且由于我正在使用 linq2entities,我不想仅仅因为 FTS 而全部切换到 linq2sql。 您不需要全部切换,只需使用 FTS 的那张表即可。

以上是关于使用实体框架的表值函数的主要内容,如果未能解决你的问题,请参考以下文章

我可以在选择时让我的实体框架DbSet调用我的表值函数吗?

Entity Framework 4 表值函数

实体框架存储过程表值参数

在实体框架中编写查询

如何在 SQL Server 的表值函数中使用 CTE 语句

连接使用表值函数创建的表时优化 TSQL