web-dev-qa-db-fra.com

Exécuter une procédure stockée avec un cadre d'entité

est-il possible d'exécuter une procédure stockée à l'aide de EF, qui sélectionne les enregistrements de la base de données à partir de deux tables ou plus à l'aide de jointure interne et de jointure externe gauche.

mon point de vue est d'éviter la méthode de faire des jointures dans EF ou LINQ, ce qui me pose de nombreux problèmes. 

donc, si je crée cette procédure, puis-je l'appeler avec des paramètres d'entrée utilisateur, peut affecter le résultat à la méthode .ToList(), puis ajouter le résultat à asp: repeater .DataSource

Je sais que c’est peut-être une question étrange, mais je veux le faire pour plusieurs raisons D’abord, utiliser EF parce que je me sens plus à l'aise . , j’ai lu quelque part que l’utilisation de procédures stockées améliorera les performances de la requête, lorsqu’elle est utilisée pour appeler une requête fréquemment.

si quelqu'un pouvait m'aider à répondre à ces questions avec un exemple, je vous en serais reconnaissant. 

6
Fares Ayyad

Vous pouvez appeler SqlQuery à partir de votre contexte de données Entity Framework. 

context.Database.SqlQuery<YourType>("exec usp_StoredProcedure").ToList()

Vous auriez besoin d'une classe pour mapper les résultats de la requête, à titre d'exemple:

public class YourType
{
   public string Property1 { get; set; }
   public string Property2 { get; set; }
}

Vous pouvez également spécifier des paramètres à la requête, comme indiqué ci-dessous:

SqlParameter parameter1 = new SqlParameter("@Parameter1", "Value");
context.Database.SqlQuery<YourType>("exec usp_StoredProcedure @Parameter1", parameter1).ToList()
17
Darren

Vous utilisez Entity Framework avec MySQL:

Dans cet exemple, ma procédure stockée attend un paramètre, nommé myParam de Type BIGINT

var myParam = new SqlParameter("@myParam", (MySqlDbType.Int64)).Value = 100;

var res = _context.Database.SqlQuery<MyEntity>($"call MyProcedureName({pyParam})");

Notez que j'utilise C # String Interpolation pour construire ma chaîne de requête.

0
Hooman Bahreini

Nous allons voir comment exécuter la procédure stockée dans Entity Framework, dans MVC, nous allons voir comment ajouter un EF.

Exécutez le script suivant dans la base de données pour créer une procédure stockée.

CREATE PROCEDURE FETCHEMPLOYEES AS
BEGIN
    SELECT * FROM EMPTABLE
END

CREATE PROCEDURE FETCHEMPLOYEE(@ID INT) AS
BEGIN
  SELECT * FROM EMPTABLE WHERE ID = @ID
END



public class EmpModel
{
    EmployeeEntities empdb = new EmployeeEntities();

    public List<EMPTABLE> GetEmployees()
    {
       return empdb.FETCHEMPLOYEES().ToList();  
    }

    public EMPTABLE GetEmployee(int? id)
    {
        return empdb.FETCHEMPLOYEE(id).ToList().Single();
    }
}

public class EmployeeController : Controller
{
    Models.EmpModel mod = new Models.EmpModel();

    public ActionResult Index()
    {
        List<EMPTABLE> result = mod.GetEmployees();
        return View(result);
    }

    public ActionResult Details(int id)
    {
        EMPTABLE result = mod.GetEmployee(id);
        return View(result);
    }
}

Pour plus de détails, référez-vous au lien suivant: http://dotnetvisio.blogspot.in/2014/01/execute-stored-procedure-using-entity.html

0
Rajesh G

vous pouvez utiliser ExecuteFunction de ObjectContext classe: 

 public virtual ObjectResult<CustomClassForStoreReturnedData> NameOfStoredProcedure(Nullable<int> tableID)
    {
        var IDParameter = tableID.HasValue ?
            new ObjectParameter("tableID", tableID) :
            new ObjectParameter("tableID", typeof(int));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustomClassForStoreReturnedData>("NameOfStoredProcedureInSQLDatabase", IDParameter);
    }
0
AminM