ホームページ > バックエンド開発 > C++ > Entity Framework Core でカスタム データ型を使用して生の SQL クエリを実行する方法

Entity Framework Core でカスタム データ型を使用して生の SQL クエリを実行する方法

Barbara Streisand
リリース: 2025-01-27 01:16:09
オリジナル
626 人が閲覧しました

How to Execute Raw SQL Queries with Custom Data Types in Entity Framework Core?

Entity Framework Core でのカスタム データ型を使用した生の SQL クエリの実行

Entity Framework Core の進化により、特にカスタム データ型に関して、生の SQL クエリの処理方法が変わりました。 dbData.Database.SqlQuery<somemodel> メソッドは最近のバージョンでは使用できなくなりました。 このガイドでは、さまざまな EF Core バージョンでカスタム型を返す生の SQL クエリを実行する方法について詳しく説明します。

EF Core 8 以降

EF Core 8 以降のリリースでは、SqlQuery メソッドが大幅に強化され、任意の型の戻りを直接サポートします。 これにより、プロセスが大幅に簡素化されます。

EF Core 3.0 以降

キーレスエンティティタイプの活用:

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>
ログイン後にコピー

EF コア 2.1 (RC1)

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 コア 2.0

代替戦略:

EF Core 2.0 には次の回避策が必要です:

  • カスタム DTO: クエリ結果をマッピングするための専用のデータ転送オブジェクト (DTO) を作成します。 これには、データを手動でマッピングする必要があります。
  • SqlCommand: SqlCommand を直接使用します。 これにより、EF Core の機能がバイパスされ、その利点が減ります。

以上がEntity Framework Core でカスタム データ型を使用して生の SQL クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート