Maison >développement back-end >C++ >Comment puis-je transmettre des paramètres table aux procédures stockées dans Entity Framework ?

Comment puis-je transmettre des paramètres table aux procédures stockées dans Entity Framework ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-12 22:01:43395parcourir

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

Passer des paramètres table aux procédures stockées dans Entity Framework

Entity Framework lui-même ne prend pas en charge de manière native la transmission de paramètres table directement aux procédures stockées. Cependant, cela peut être réalisé en utilisant la commande ObjectContext avec ExecuteStoreQuery.

Créer une méthode d'entreposage universelle

Tout d'abord, définissez une méthode générale d'entreposage :

<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>

Utilisez ExecuteStoreQuery avec des paramètres table

Lors de l'utilisation de ExecuteStoreQuery avec des paramètres table, définissez l'attribut SqlParameter de SqlDbType sur Structured et l'attribut TypeName sur le nom du type défini par l'utilisateur :

<code class="language-csharp">var warnings = new SqlParameter("warnings", SqlDbType.Structured);
warnings.Value = dt;
warnings.TypeName = "dbo.udt_Warnings";</code>

Passer les paramètres à la procédure stockée

Dans la méthode ExecuteStoredProcedure, assurez-vous que les paramètres sont passés dans le bon ordre :

<code class="language-csharp">entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>

DbContext et ObjectContext

Pour Entity Framework Code First, DbContext doit être converti en ObjectContext pour utiliser la méthode ExecuteStoreQuery :

<code class="language-csharp">var entities = (ObjectContext)context;
entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>

Notes supplémentaires

  • Chaque colonne du tableau défini par l'utilisateur doit être transmise, même si elle a des valeurs par défaut.
  • Les paramètres passés à ExecuteStoreCommand doivent être dans le même ordre que dans la procédure stockée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn