簡體   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