Procédure stockée Entity Framework non disponible

c# entity-framework stored-procedures

Question

J'ai ajouté une référence à une procédure stockée dans mon fichier edmx, puis un clic droit dessus et sélectionné "Créer une importation de fonction", il a été ajouté au dossier Function Imports sous EntityContainer dans le navigateur de modèle.

Si je comprends bien, je devrais pouvoir l'utiliser de la manière suivante:

sampleEntities db = new sampleEntities();
db.SampleStoredProcedure();

mais cela n'apparaît pas sur l'objet db. Y a-t-il une étape qui me manque? L'importation de fonction est définie sur public, n'a pas de valeur de retour et un paramètre que je peux voir lorsque je le développe.

Réponse acceptée

Votre procédure stockée renvoie-t-elle une valeur simple (c'est-à-dire scalaire )? Si tel est le cas, le concepteur ne générera pas le code pour vous :

Si le type de retour est défini sur un type simple, Visual Basic ou C # n'est pas généré automatiquement pour l'importation de fonction.

Cependant, cela a été corrigé dans la dernière version de Entity Framework :

Vous pouvez sélectionner les types de retour Aucun et Scalar comme auparavant. Cependant, lors de la création de l '«Importation de fonction», un nouveau code est injecté dans le fichier Modèle code arrière qui matérialise la procédure stockée dans une opération sur ObjectContext lui-même.


Réponse populaire

Vous pouvez exécuter une procédure stockée avec la classe EntityCommand, ajouter une nouvelle procédure stockée au modèle de données d'entité, puis l'ajouter en tant que fonction et la nommer, puis exécuter la procédure stockée:

public bool ExecuteCMD(string Command) 
{
    using (var entities = new DbEntities())
    {
        var conn = new System.Data.EntityClient.EntityConnection(entities.Connection.ConnectionString);
        try
        {
            conn.Open();
            using (EntityCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "DbEntities." + Command;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
            }
            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
        }
    }
}


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow