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.
[Keyless] public class SomeModel { // Properties }
Führen Sie Ihre Abfrage entweder mit FromSqlRaw
oder FromSql
aus:
var result = context.SomeModels.FromSqlRaw("SQL_SCRIPT").ToList(); var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();
Verwendung von DbQuery<T>:
Definieren Sie in EF Core 2.1 RC1 eine DbQuery<T>
-Eigenschaft in Ihrem DbContext
und verwenden Sie die FromSql
-Methode:
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();
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!