Entity framework core SqlQuery<;T>;EF Core 3.1中的等效值

Entity framework core SqlQuery<;T>;EF Core 3.1中的等效值,entity-framework-core,ado.net,.net-core-3.1,entity-framework-core-3.1,Entity Framework Core,Ado.net,.net Core 3.1,Entity Framework Core 3.1,我正在从ASP.NET Framwork 4.7迁移到ASP.NET Core 3.1,我真的陷入了以下困境: 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

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

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}";
我有一个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(); 
var result=Context.Database.SqlQuery(Query.ToList();

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

您可以使用新的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}";

您可以使用新的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}";

有关详细信息,请参阅EF核心文档。尽管您发布的示例查询可以很容易地使用LINQ生成,从而避免原始Sql的缺点。有关详细信息,请参阅EF核心文档。尽管您发布的示例查询可以很容易地使用LINQ生成,因此避免了原始Sql的缺点。