在实体框架中执行表值函数作为IQueryable

时间:2013-08-10 23:48:16

标签: c# entity-framework

我是Entity Framework的新手,我使用的是Linq-to-SQL,它工作得很好,但是当我想创建一个WCF数据服务时,我从服务中收到很多错误,所以我决定搬家到EF。

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用IQueryable

将结果转换为AsQueryable()
IEnumerable<Record> result = {call TVF};
IQueryable<Record> query = result.AsQueryable();
return query;

答案 1 :(得分:1)

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