ホームページ > バックエンド開発 > C++ > Entity Framework のストアド プロシージャにテーブル値パラメーターを渡すにはどうすればよいですか?

Entity Framework のストアド プロシージャにテーブル値パラメーターを渡すにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-12 22:01:43
オリジナル
326 人が閲覧しました

How Can I Pass Table-Valued Parameters to Stored Procedures in Entity Framework?

Entity Framework のストアド プロシージャにテーブル値パラメーターを渡す

Entity Framework 自体は、テーブル値パラメーターをストアド プロシージャに直接渡すことをネイティブにサポートしていません。ただし、これは、ObjectContext コマンドを ExecuteStoreQuery とともに使用することで実現できます。

ユニバーサルな倉庫保管方法を作成する

まず、一般的な倉庫方法を定義します。

<code class="language-csharp">public IEnumerable<T> ExecuteStoredProcedure<T>(string procedureName, params object[] parameters)
{
    // 构建命令字符串
    StringBuilder command = new StringBuilder();
    command.Append("EXEC ");
    command.Append(procedureName);
    command.Append(" ");

    // 添加参数占位符
    for (int i = 0; i < parameters.Length; i++)
    {
        if (i > 0)
            command.Append(",");

        command.Append("{" + i + "}");
    }

    // 执行查询
    return this.context.ExecuteStoreQuery<T>(command.ToString(), parameters);
}</code>
ログイン後にコピー

テーブル値パラメーターで ExecuteStoreQuery を使用する

テーブル値パラメーターで ExecuteStoreQuery を使用する場合は、SqlParameterSqlDbType 属性を Structured に設定し、TypeName 属性をユーザー定義型の名前に設定します:

<code class="language-csharp">var warnings = new SqlParameter("warnings", SqlDbType.Structured);
warnings.Value = dt;
warnings.TypeName = "dbo.udt_Warnings";</code>
ログイン後にコピー

ストアド プロシージャにパラメータを渡す

ExecuteStoredProcedure メソッドで、パラメータが正しい順序で渡されていることを確認してください:

<code class="language-csharp">entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
ログイン後にコピー

DbContext と ObjectContext

Entity Framework コードの場合 まず、DbContext メソッドを使用するには、ObjectContextExecuteStoreQuery に変換する必要があります。

<code class="language-csharp">var entities = (ObjectContext)context;
entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
ログイン後にコピー

追加メモ

  • ユーザー定義テーブルのすべての列は、デフォルト値がある場合でも渡す必要があります。
  • ExecuteStoreCommand に渡されるパラメーターは、ストアド プロシージャ内と同じ順序である必要があります。

以上がEntity Framework のストアド プロシージャにテーブル値パラメーターを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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