Die Weiterentwicklung von Entity Framework Core hat die Art und Weise verändert, wie unformatierte SQL-Abfragen gehandhabt werden, insbesondere in Bezug auf benutzerdefinierte Datentypen. Die Methode dbData.Database.SqlQuery<somemodel>
ist in neueren Versionen nicht mehr verfügbar. In dieser Anleitung wird detailliert beschrieben, wie Sie unformatierte SQL-Abfragen ausführen, die benutzerdefinierte Typen in verschiedenen EF Core-Versionen zurückgeben.
EF Core 8 und nachfolgende Versionen verbessern die SqlQuery
-Methode erheblich und unterstützen direkt die Rückgabe beliebiger Typen. Dies vereinfacht den Prozess erheblich.
Nutzung schlüsselloser Entitätstypen:
Der empfohlene Ansatz für die Handhabung benutzerdefinierter Datentypen in unformatierten SQL-Abfragen in EF Core 3.0 und höher ist die Verwendung schlüsselloser Entitätstypen. Dies wird mithilfe des [Keyless]
-Attributs oder der .HasNoKey()
-Konfigurationsmethode erreicht.
<code class="language-csharp">[Keyless] public class SomeModel { // Properties }</code>
Führen Sie Ihre Abfrage entweder mit FromSqlRaw
oder FromSql
aus:
<code class="language-csharp">var result = context.SomeModels.FromSqlRaw("SQL_SCRIPT").ToList(); var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();</code>
Verwendung von DbQuery
Definieren Sie in EF Core 2.1 RC1 eine DbQuery<T>
-Eigenschaft in Ihrem DbContext
und verwenden Sie die FromSql
-Methode:
<code class="language-csharp">public DbSet<SomeModel> SomeModels { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<SomeModel>().HasNoKey(); } // Execute query var result = context.SomeModels.FromSql("SQL_SCRIPT").ToList();</code>
Alternative Strategien:
EF Core 2.0 erfordert Problemumgehungen:
SqlCommand
direkt verwenden. Dadurch werden die Funktionen von EF Core umgangen und seine Vorteile verringert.Das obige ist der detaillierte Inhalt vonWie führe ich rohe SQL-Abfragen mit benutzerdefinierten Datentypen in Entity Framework Core aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!