3

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

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

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

任何帮助表示赞赏。

4

3 回答 3

6

Code-First 策略不支持表值函数,仅适用于带 EDMX 的 Database-First:http: //msdn.microsoft.com/en-us/hh859577。引用:

TVF 目前仅在 Database First 工作流程中受支持。

于 2012-09-03T14:16:11.990 回答
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 查询的一部分;但是,在这种情况下,这就是我所需要的。

于 2013-10-24T18:02:04.133 回答
-1

以下建议已从此链接http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-table-valued-functions-june-ctp.aspx中删除。我发现这些信息可能对您有用。

代码优先方法

实体框架 2011 年 6 月 CTP 不包括对 TVF 的 Code First 支持。但是,您可以对 TVF 使用 DbContext。您可以通过将 DbContext 模板添加到您的模型来完成此操作。添加模板的步骤如下:

  • 打开 NorthwindModel.edmx 并右键单击画布
  • 点击添加代码生成项…</li>
  • 选择 ADO.NET DbContext Generator V4.2,输入模板名称,然后单击添加
于 2013-05-02T03:22:04.133 回答