繁体   English   中英

如何在 EF Core 2.2 中进行原始 sql 查询?

[英]How do I make a raw sql query in EF Core 2.2?

我正在使用 dotnet core 2.x 应用程序。

我们有一堆“代码优先”实体,以及 DBContext 中每个实体的 DBSet。

例子:

public class MyContext : DBContext
{
  public MyContext(DBContextOptions<MyContext> options) : base (options) {}

  public DbSet<Models.MyTable> MyTable { get; set; }
  ...

到现在为止还挺好。 现在我想做这个查询:

SELECT DISTINCT MyColumn from dbo.MyTable

应该很容易吧? “经典 EF”有dbData.Database.SqlQuery<SomeModel> ,但在 EF Core 2.x 中我应该能够做这样的事情:

var myList = _context.MyTable.FromSql("SELECT DISTINCT MyColumn from dbo.MyTable").ToList();

这失败了:

错误 CS1061:DbSet 不包含 FromSql 的定义...

我读到可能我需要安装一个额外的包,“Microsoft.EntityFrameworkCore.Relational”。 但是 NuGet > Browse 只向我展示了 v3.1(没有 2.x 版本)......并且安装这个包想要引入许多其他依赖项(!)

问题

有什么方法可以使用 EF Core 2.x 进行简单的 SQL 查询...

......不需要“SELECT *”(引进整个表!),并且不需要下载和安装一堆额外的NuGet依赖呢?

我认为你真正想要的是FromSqlRaw https://docs.microsoft.com/en-us/ef/core/querying/raw-sql

在任何情况下,如果您在 EF 中,那么对于这样一个简单的查询,您不需要这样做。 EF select 不需要您从整个表模式中获取数据。 您可以使用 .select 指定您想要的确切列。

有关更多信息,请参阅https://www.brentozar.com/archive/2016/09/select-specific-columns-entity-framework-query/

谢谢你,伊万·斯托耶夫。 解决方案是使用 LINQ“选择”:

var myList = _context.MyTable.Select(e => e.MyColumn).Distinct().ToList();

这工作就像一个魅力...它不需要任何外部依赖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM