webentwicklung-frage-antwort-db.com.de

Führen Sie die gespeicherte Prozedur mithilfe des Entitätsframeworks aus

ist es möglich, eine gespeicherte Prozedur mit EF auszuführen, die Datensätze aus der Datenbank aus zwei oder mehreren Tabellen mit Inner Join und Left Outer Join auswählt.

mein Standpunkt ist es, die Methode der Joins in EF oder LINQ zu vermeiden, die viele Probleme mit ihr haben. 

wenn ich also diese Prozedur erstelle, kann ich sie mit Parametern aus Benutzereingaben aufrufen, das Ergebnis der .ToList()-Methode zuweisen und das Ergebnis dann zu asp: repeater .DataSource hinzufügen. 

Ich weiß, dass dies eine seltsame Frage sein kann, aber ich möchte dies aus vielen Gründen tun. Erstens, EF zu verwenden, weil ich mich wohler fühle. Zweitens, um Joins in EF zu beseitigen Ich habe irgendwo gelesen, dass die Verwendung gespeicherter Prozeduren die Abfrageleistung verbessert, wenn häufig eine Abfrage aufgerufen wird.

wenn mir jemand helfen könnte, diese Fragen anhand eines Beispiels zu beantworten, würde ich mich freuen. 

6
Fares Ayyad

Sie können SqlQuery aus Ihrem Entity Framework-Datenkontext aufrufen. 

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

Sie benötigen beispielsweise eine Klasse, um die Abfrageergebnisse wiederzugeben. Beispiel:

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

Sie können der Abfrage auch Parameter wie folgt angeben:

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

In verwenden Sie Entity Framework mit MySQL:

In diesem Beispiel erwartet meine gespeicherte Prozedur einen Parameter mit dem Namen myParam von Type BIGINT

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

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

Beachten Sie, dass ich C # String Interpolation verwende, um meine Abfragezeichenfolge zu erstellen.

0
Hooman Bahreini

Wir werden sehen, wie die gespeicherte Prozedur in Entity Framework ausgeführt wird. In MVC wird gezeigt, wie die EF hinzugefügt wird.

Führen Sie das folgende Skript in der Datenbank aus, um eine gespeicherte Prozedur zu erstellen.

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);
    }
}

Weitere detaillierte Informationen finden Sie unter folgendem Link: http://dotnetvisio.blogspot.in/2014/01/execute-stored-procedure-using-entity.html

0
Rajesh G

sie können ExecuteFunction der ObjectContext-Klasse verwenden: 

 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