道歉,如果这个措辞不是很好,但升级到VS2012/.NET 4.5
后,我知道实体框架5中可以使用表值函数。
我们使用自定义数据层/ orm,我找不到任何不使用EDMX模型生成器的代码示例,因为这没用。
作为一个非常疯狂的猜测,我会说一些定义表值函数的代码需要在OnModelCreating(DbModelBuilder modelBuilder)
中添加。
任何帮助表示感谢。
答案 0 :(得分:6)
Code-First策略不支持表值函数,仅适用于EDMX的数据库优先:http://msdn.microsoft.com/en-us/hh859577。引用:
TVF目前仅在Database First工作流程中受支持。
答案 1 :(得分:2)
我能够使用EF 5轻松执行表值函数,如下所示:
int orderID = 100;
var query = context.Database.SqlQuery<Product>("Select * from [dbo].[tfn_GetOrderProducts](@p0)", orderID);
var results = query.ToList();
其中Product可以是任何POCO类,其成员名称与表值函数的结果匹配。
这不是一个完美的解决方案 - 它不会返回IQueryable,因此您不能将其用作更大的LINQ查询的一部分;然而,在这种情况下,这就是我所需要的一切。
答案 2 :(得分:-1)
以下建议已从此链接http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-table-valued-functions-june-ctp.aspx中删除。我发现这些信息可能对您有用。
代码优先方法
实体框架2011年6月CTP不包括Code First支持 TVFs。但是,您可以对您的TVF使用DbContext。你可以做 这可以通过将DbContext模板添加到模型中来实现。要添加的步骤 模板如下:
- 打开NorthwindModel.edmx并右键单击画布
- 点击添加代码生成项...
- 选择ADO.NET DbContext Generator V4.2,输入模板名称,然后单击添加