【问题标题】:How to run dynamic SQL query in Entity Framework 7 that auto-maps to Entities (SqlQuery<T>)?如何在 Entity Framework 7 中运行自动映射到实体 (SqlQuery<T>) 的动态 SQL 查询?
【发布时间】:2015-06-07 10:02:00
【问题描述】:

我有一个现有的应用程序,我正在尝试从 MVC5/EF6 升级到 MVC6/EF7。我们动态创建了一些 SQL 表,因此,我们利用了

System.Data.Entity.Database.SqlQuery

自动映射到我们在整个应用程序中使用的实体的方法。

这种方法似乎已经消失(即不是 EF7 中的 Microsoft.Data.Entity.Infrastructure.Database )(或尚未实现)。是否有计划在 EF7 中重新实现此方法,或者是否有其他方法可以实现此目的?在我们弄清楚这一点之前,我们的项目有点死。

于 2015 年 5 月 20 日编辑

我一直在尝试使用 FromSql 进行这项工作,因为这是 Beta4 中可用的功能,但无论我尝试什么连接字符串、参数的组合,我都会不断收到不同版本的“@xxxvariable 附近的语法不正确”消息.

var results = Set<AssessmentResult>().FromSql("dbo.GetAssessmentResults @FieldA='Data1', @FieldB='Data2', @UserId = 2303"); 
var results2 = Set<AssessmentResult>().FromSql("dbo.GetAssessmentResults @FieldA= {0}", intData); 

这两个调用都会导致

"Incorrect syntax near '@FieldA'" 

有什么想法吗?

【问题讨论】:

    标签: entity-framework asp.net-core-mvc entity-framework-core


    【解决方案1】:

    我们最近在DbSet 上引入了.FromSql() 扩展方法。它还有一个额外的好处,就是您可以在它之上继续编写 LINQ。

    var customers = db.Customers
        .FromSql("SELECT * FROM Customer")
        .Where(c => c.Name.StartsWith("A"));
    

    【讨论】:

    • 感谢您的回复!那是 7.0.0.0-beta3 的一部分吗?还是比这更新?此外,SqlQuery 方法可以将 Type 指定为其第一个参数。我没有可用的 DbSet 来使用此方法。我目前使用反射动态创建每个类型。有没有一种方法可以使用您上面提到的这种方法?再次,我非常感谢您的意见。谢谢!
    • FromSql 在 beta 3 中不可用。目前,FromSql 是我们运行纯 SQL 语句的唯一方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2010-10-07
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多