【问题标题】:Execute a Table Valued Function as an IQueryable in Entity Framework在实体框架中将表值函数作为 IQueryable 执行
【发布时间】:2013-08-11 15:52:37
【问题描述】:

我是 Entity Framework 的新手,我使用的是 Linq-to-SQL,它运行良好,但是当我想创建 WCF 数据服务时,我从服务中收到很多错误,所以我决定搬家到英孚。

但我的问题是 TVF(表值函数),在我的数据库中,我有很多 TVF 返回每个登录用户的数据以及指定对象的用户权限,例如我有一个表 Records 和一个TVFuf_SelectUserRecords(@UID BIGINT)。我想执行这个函数并返回它的结果来代替Records 表。

在 Linq-to-SQL 中它运行良好,但在 EF 中我无法让它运行,问题是当我将 TVF 添加到模型时(通过一些技巧,因为 EF 设计器不支持它)的结果TVF 不是 IQueryable 而是 IEnumerable,所以我无法在 WCF 数据服务中返回它。

有什么方法可以将函数作为表格执行吗?

【问题讨论】:

  • 您使用的是什么版本的 EF?看起来better support for TVFs 存在于 EF 5 中。
  • 我在VS2012中使用EF5

标签: c# entity-framework


【解决方案1】:

您可以使用AsQueryable() 将结果转换为IQueryable

IEnumerable<Record> result = {call TVF};
IQueryable<Record> query = result.AsQueryable();
return query;

【讨论】:

  • 是否会针对数据库或内存中的对象执行查询?整个 enumerable 是否会从数据库加载到内存中,然后在其上运行查询?
  • 这取决于底层类型是什么。如果它已经实现了IQueryable,那么它应该。我从来没有尝试过,所以我不能肯定。
【解决方案2】:

在我看到 EF 5 支持 TVF 的每个地方,但在我的项目中,我没有看到对它的支持。为什么?我使用的是 .NET 4,而 EF 5 的新功能仅适用于 .NET 4.5

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多