6 Stimmen

Wie man eine gespeicherte Prozedur mithilfe von DBContext im ASP.NET MVC 3 Entity Framework zuordnet

Ich mache hier das Mapping für Tabellen.. Wie mappe ich hier gespeicherte Prozeduren?

public class AppDBContext : DbContext
{
    public DbSet Benutzerkonto { get; set; }
    public DbSet GetUserAccounts { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity().ToTable("Benutzerkonto");
        modelBuilder.Entity().ToTable("Kunde");

        base.OnModelCreating(modelBuilder);
    }
}

6voto

Paul Fleming Punkte 23538

Code First unterstützt keine gespeicherten Prozeduren.

Sie können Skripte in einem Datenbank-Initialisierer ausführen:

string sql = "CREATE PROCEDURE [MyProc]...";
context.Database.ExecuteSqlCommand(sql);

Sie können Prozeduren direkt aus dem Kontext heraus ausführen, wie folgt:

string command = "EXEC MyProc";
IEnumerable results = context.Database.SqlQuery(command, null);

Persönlich verpacke ich das alles in ein schönes OO-Modell. Ich habe eine spezialisierte SP-Klasse mit stark typisierten Methoden. Diese Methoden sind mit einem Attribut versehen, das dem DB-Initialisierer sagt, dass eine gespeicherte Prozedur unter einem bestimmten Namen aus einer bestimmten Quelle erstellt werden soll. Die stark typisierten Methoden rufen die gespeicherte Prozedur auf.

0voto

Sameer Joshi Punkte 87

Fügen Sie dies in AppDBContext ein:

public virtual ObjectResult MyStoredProcedure(string parameter)
        {
            ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(ResultObject).Assembly);

            var Param = parameter!= null ?
                new ObjectParameter("Column", parameter) :
                new ObjectParameter("Column", typeof(string));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("MyStoredProcedure", Param);
        }

Fügen Sie dies in .edmx-Datei ein

0voto

QMaster Punkte 3479

Ich verwende den DB-Kontext und den DB-First-Ansatz. Nach dem Erstellen von gespeicherten Prozeduren wechseln Sie zur Modellseite in VS und wählen Sie im Kontextmenü der Modellseite die Option "Modell aus Datenbank aktualisieren". Wählen Sie dann in der Modellbrowser > Funktionenimporte importierte SPs aus und falls Sie deren Namen, Rückgabewerte usw. ändern möchten. Nach all dem können Sie die SP genauso verwenden wie innere Methoden oder andere Entitätsklassen. Zum Beispiel nehmen wir an, Sie haben eine SP namens "sp_UserUpdate", diese SP verwendet userName und beispielsweise userAge als innere Parameter und hat res als Ausgabeparameter für den Ergebnisstatus. Nach dem Importieren der SP in VS können Sie sie wie folgt verwenden:

System.Data.Objects.ObjectParameter pRes = new System.Data.Objects.ObjectParameter("res", 0);
db.sp_UserUpdate(userName , userAge , pRes);

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X