EF 5中的表值函数?

时间:2012-09-03 14:07:36

标签: c# sql entity-framework entity-framework-5

道歉,如果这个措辞不是很好,但升级到VS2012/.NET 4.5后,我知道实体框架5中可以使用表值函数。

我们使用自定义数据层/ orm,我找不到任何不使用EDMX模型生成器的代码示例,因为这没用。

作为一个非常疯狂的猜测,我会说一些定义表值函数的代码需要在OnModelCreating(DbModelBuilder modelBuilder)中添加。

任何帮助表示感谢。

3 个答案:

答案 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,输入模板名称,然后单击添加
  •