Entity Framework Core 中沒有 DbSet 的原始 SQL 查詢的解決方法
Entity Framework Core 刪除 dbData.Database.SqlQuery<somemodel>
在執行返回未映射實體的原始 SQL 查詢時帶來了挑戰,特別是對於帶有排名的全文搜索等任務。 以下是克服此限制的方法:
EF Core 8 及更高版本:
EF Core 8 及更高版本中最簡單的解決方案是直接使用 SqlQuery
。 它現在支持返回任意類型,在許多情況下消除了對無鍵實體的需求。
EF Core 3.0 及更高版本:
EF Core 3.0 及更高版本的推薦方法是利用無鍵實體類型:
[Keyless]
屬性或 Fluent API 的 .HasNoKey()
定義無鍵實體類型。 FromSqlRaw
或 FromSqlAsync
執行 SQL 查詢:<code class="language-csharp">var result = context.SomeModels.FromSqlRaw("SQL SCRIPT").ToList(); var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();</code>
EF Core 2.1 及更高版本:
對於舊版本(EF Core 2.1 及更高版本),請考慮使用 查詢類型:
DbQuery<T>
中聲明 DbContext
屬性,其中 T
是與查詢的輸出結構匹配的自定義類。 FromSql
屬性上使用 DbQuery
:<code class="language-csharp">public DbQuery<SomeModel> SomeModels { get; set; } var result = context.SomeModels.FromSql("SQL_SCRIPT").ToList(); var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();</code>
這些方法提供了從原始 SQL 查詢檢索數據的靈活性,適應涉及 Entity Framework Core 中的排名和非映射實體的場景。
以上是如何在實體框架核心中執行無DBSET的RAW SQL查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!