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

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

Patricia Arquette
Libérer: 2025-01-12 22:06:43
original
296 Les gens l'ont consulté

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

Paramètres table de la procédure stockée Entity Framework

Entity Framework lui-même ne prend pas directement en charge la transmission de paramètres table aux procédures stockées. Cependant, une solution de contournement peut être implémentée en utilisant la méthode ObjectContext de ExecuteStoreQuery .

Dans le code ci-dessus, il existe une méthode ExecuteStoredProcedure courante dans le référentiel :

<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>
Copier après la connexion

Lorsque vous transmettez des paramètres table à l'aide de cette méthode, vous pouvez obtenir des erreurs telles que "Le paramètre de type de table p6 doit avoir un nom de type valide". Pour résoudre ce problème, vous devez spécifier SqlDbType comme Structured et définir SqlParameter.TypeName sur le nom du type défini par l'utilisateur (UDT) dans la base de données.

Cependant, même avec ces modifications, vous pouvez toujours rencontrer des erreurs liées à une syntaxe invalide.

Méthode d'extension personnalisée

Une méthode d'extension personnalisée de la classe

ObjectContext peut simplifier ce processus :

<code class="language-csharp">public static void ExecuteStoredProcedure(this ObjectContext context, string storedProcName, params object[] parameters)
{
    string command = "EXEC " + storedProcName + " @caseid, @userid, @warnings";

    context.ExecuteStoreCommand(command, parameters);
}</code>
Copier après la connexion

Cette méthode d'extension vous permet d'appeler directement des procédures stockées avec des paramètres table. Un exemple d'utilisation est le suivant :

<code class="language-csharp">var entities = new NewBusinessEntities();

var dt = new DataTable();
dt.Columns.Add("WarningCode");
dt.Columns.Add("StatusID");
dt.Columns.Add("DecisionID");
dt.Columns.Add("Criticality");

dt.Rows.Add("EO01", 9, 4, 0);
dt.Rows.Add("EO00", 9, 4, 0);
dt.Rows.Add("EO02", 9, 4, 0);

var caseId = new SqlParameter("caseid", SqlDbType.Int);
caseId.Value = 1;

var userId = new SqlParameter("userid", SqlDbType.UniqueIdentifier);
userId.Value = Guid.Parse("846454D9-DE72-4EF4-ABE2-16EC3710EA0F");

var warnings = new SqlParameter("warnings", SqlDbType.Structured);
warnings.Value = dt;
warnings.TypeName = "dbo.udt_Warnings";

entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
Copier après la connexion

Restrictions

Lorsque vous utilisez cette méthode d'extension ou des méthodes personnalisées similaires, veuillez tenir compte des limitations suivantes :

  • Les paramètres de la procédure stockée doivent être dans l'ordre et correspondre aux paramètres passés à la méthode d'extension.
  • Toutes les colonnes de l'UDT doivent être spécifiées, même si elles ont des valeurs par défaut.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal