抱歉,如果这不是很好的措辞,但在升级到 之后VS2012/.NET 4.5
,我知道表值函数在实体框架 5 中是可能的。
我们使用自定义数据层/orm,我找不到任何不使用 EDMX 模型生成器的代码示例,因为这没有用。
作为一个非常疯狂的猜测,我会说一些定义表值函数的代码需要添加OnModelCreating(DbModelBuilder modelBuilder)
。
任何帮助表示赞赏。
抱歉,如果这不是很好的措辞,但在升级到 之后VS2012/.NET 4.5
,我知道表值函数在实体框架 5 中是可能的。
我们使用自定义数据层/orm,我找不到任何不使用 EDMX 模型生成器的代码示例,因为这没有用。
作为一个非常疯狂的猜测,我会说一些定义表值函数的代码需要添加OnModelCreating(DbModelBuilder modelBuilder)
。
任何帮助表示赞赏。
Code-First 策略不支持表值函数,仅适用于带 EDMX 的 Database-First:http: //msdn.microsoft.com/en-us/hh859577。引用:
TVF 目前仅在 Database First 工作流程中受支持。
我能够使用 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 查询的一部分;但是,在这种情况下,这就是我所需要的。
以下建议已从此链接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,输入模板名称,然后单击添加