【发布时间】:2011-06-03 18:22:31
【问题描述】:
实体框架能否支持在
中使用 CTE/行号的 SQL 查询<DefiningQuery> </DefiningQuery>
.edmx 文件的属性?
这是关于在这篇文章中给我的一个使用此类功能的查询:Complex / Algorithmic SQL Query
我从 sql 中得到以下 InnerException:
Incorrect syntax near the keyword 'with'.
Incorrect syntax near the keyword 'with'. If this statement is a common table ex
pression, an xmlnamespaces clause or a change tracking context clause, the previ
ous statement must be terminated with a semicolon.
Incorrect syntax near ','.
Incorrect syntax near ','.
Incorrect syntax near ')'.
在开头的“with”语句之前添加分号并不能解决问题。它说';'附近的语法不正确在这种情况下。
如果不支持,我想我可以将存储过程绑定到复杂实体,但还有其他选择吗?
谢谢。
【问题讨论】:
-
您尝试使用 CTE 是否有原因?我不知道您决定这一点所经历的一切,但 EF(以及整个 ORM)的重点是将数据库抽象到您不必担心特定数据库实现的地方。话虽这么说,我敢肯定有一些操作是 EF 本身不会处理的,你可能需要一个 CTE,在这种情况下,我会按照你的建议做,让 EF 调用一个存储过程(假设它可以) .
-
出于好奇。我有一些自定义实体,它们使用实体框架的 DefiningQuery 功能组合来自多个表的数据。还有一个简单的算法,我用来从数据库中的登录和注销条目计算用户会话的长度。另一张海报为我提供了一个非常复杂的 SQL 查询,该查询实际上完全由它自己完成。如果我创建了一个自定义 EntityType 并将其用作其定义查询,我可以非常简单地查询数据库中的这些会话。
-
This answer? 你可以把整个事情放到一个视图中。例如
CREATE VIEW yourview AS with events as ...and i.row=o.row这会让事情变得更容易吗? -
据我了解,本质上,DefiningQuery 是客户端视图。所以是的,我可以在数据库中创建一个视图。不过,我不确定 EF 中的自定义 EntityType 究竟如何与之相关。
标签: c# entity-framework linq-to-entities sql