【问题标题】:SqlQuery<T> equivalent in EF Core 3.1EF Core 3.1 中的 SqlQuery<T> 等效项
【发布时间】:2020-09-26 23:05:06
【问题描述】:

我正在从 ASP.NET Framwork 4.7 迁移到 Asp .NET Core 3.1,我真的陷入了以下困境:

我有一个 SQL 查询:

string Query=" 
SELECT I.Id,I.Combokod,I.S_Omr,I.Date,M.Price,M.Name,M.Dmedel,M.Year,M.Miles 
    FROM dbo.Itemannounces AS I  
    INNER JOIN dbo.MotorDBs AS M ON I.MotorDBs_Id=M.Id  where M.MotorID=1" ;

我的自定义类:

public class Fordonlista
        {
        public int Id { get; set; }
        public byte Combokod { get; set; }
        public byte Affarsform { get; set; }
        public byte Model { get; set; }
        public byte Dmedel { get; set; }
        public short Year { get; set; }
        public int Miles { get; set; }
        public short S_Omr { get; set; }
        public DateTime Date { get; set; }
        public int Price { get; set; }
        public string Name { get; set; }
        public string Lan { get; set; }
        public string Kommun { get; set; }
        public byte Typ { get; set; }
        }

为了检索我使用的数据:

var result = Context.Database.SqlQuery<Fordonlista>(Query).ToList(); 

问题是如何在 EF Core 中得到结果?如果 EF Core 是轻量级的,为什么还要从 Framwork 迁移到降级的 EF Core?

【问题讨论】:

  • 请参阅Raw Sql Queries 的 EF Core 文档。尽管您发布的示例查询可以使用 LINQ 轻松生成事件,但可以避免原始 Sql 的缺点。

标签: entity-framework-core ado.net .net-core-3.1 entity-framework-core-3.1


【解决方案1】:

您可以为此使用新的 EF Core 3 方法 FromSqlRaw()
在你的例子中,那将是

string Query=" 
    SELECT I.Id,I.Combokod,I.S_Omr,I.Date,M.Price,M.Name,M.Dmedel,M.Year,M.Miles 
    FROM dbo.Itemannounces AS I  
    INNER JOIN dbo.MotorDBs AS M ON I.MotorDBs_Id=M.Id
    where M.MotorID=1" ;
var result = Context.Fordonlista.FromSqlRaw(Query);

但更好的是传递如下参数:

int motorId = 1; //or passed in from other variable
var result = Context.Fordonlista.FromSqlInterpolated(
    $"SELECT I.Id,I.Combokod,I.S_Omr,I.Date,M.Price,M.Name,M.Dmedel,M.Year,M.Miles
      FROM dbo.Itemannounces AS I  
      INNER JOIN dbo.MotorDBs AS M ON I.MotorDBs_Id=M.Id
      WHERE M.MotorID={motorId}";

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多