【问题标题】:Table Valued Function in EF 5?EF 5 中的表值函数?
【发布时间】:2012-09-03 14:07:36
【问题描述】:

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

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

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

任何帮助表示赞赏。

【问题讨论】:

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


    【解决方案1】:

    代码优先策略不支持表值函数,仅适用于具有 EDMX 的数据库优先策略:http://msdn.microsoft.com/en-us/hh859577。引用:

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

    【讨论】:

    【解决方案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 查询的一部分;但是,在这种情况下,这就是我所需要的。

    【讨论】:

      【解决方案3】:

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

      代码优先方法

      Entity Framework 2011 年 6 月 CTP 不包括 Code First 支持 TVF。但是,您可以对 TVF 使用 DbContext。你可以做 通过将 DbContext 模板添加到您的模型中。添加的步骤 模板如下:

      • 打开 NorthwindModel.edmx 并右键单击画布
      • 点击添加代码生成项…
      • 选择 ADO.NET DbContext Generator V4.2,输入模板名称,然后单击添加

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2023-02-08
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        相关资源
        最近更新 更多