Entity Framework Core の進化により、特にカスタム データ型に関して、生の SQL クエリの処理方法が変わりました。 dbData.Database.SqlQuery<somemodel>
メソッドは最近のバージョンでは使用できなくなりました。 このガイドでは、さまざまな EF Core バージョンでカスタム型を返す生の SQL クエリを実行する方法について詳しく説明します。
EF Core 8 以降のリリースでは、SqlQuery
メソッドが大幅に強化され、任意の型の戻りを直接サポートします。 これにより、プロセスが大幅に簡素化されます。
キーレスエンティティタイプの活用:
EF Core 3.0 以降で生の SQL クエリでカスタム データ型を処理する場合に推奨されるアプローチは、キーのないエンティティ タイプを採用することです。 これは、[Keyless]
属性または .HasNoKey()
構成メソッドを使用して実現されます。
<code class="language-csharp">[Keyless] public class SomeModel { // Properties }</code>
FromSqlRaw
または FromSql
のいずれかを使用してクエリを実行します:
<code class="language-csharp">var result = context.SomeModels.FromSqlRaw("SQL_SCRIPT").ToList(); var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();</code>
DbQuery の使用
EF Core 2.1 RC1 では、DbQuery<T>
内で DbContext
プロパティを定義し、FromSql
メソッドを使用します。
<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>
代替戦略:
EF Core 2.0 には次の回避策が必要です:
SqlCommand
を直接使用します。 これにより、EF Core の機能がバイパスされ、その利点が減ります。以上がEntity Framework Core でカスタム データ型を使用して生の SQL クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。