none
Entity Framework 4.0 Insert, Update und Deletes über eingebundene Sored Procedures RRS feed

  • Frage

  • Hallo zusammen,

    habe über EF 4.0 ein EDM erstellt, Stored Porocedures für Insert, Update und Delete entsprechend eingebunden. Solange ich für ein Grid eine Entität als ganzes als Datasource benutze, funktioniert das ales recht gut.

    1.) Da in der gefüllten Entität, Datensätze vorhanden sind die nicht angezeigt werden sollen filtere ich über eine LINQ query nur die die benötigten DataRows aus und binde das Grid direkt an die Abfrage==> s. Code

            private void frmAnredenShow_Load(object sender, EventArgs e)
            {

               //context wird weiter oben im Code initialisiert und ist im gesamten Modul "sichtbar"
                var anr = from anreden in context.Anreden
                          where anreden.IsVisible == 1
                          select anreden;
                anredeBindingSource.DataSource = anr;
            }

    Die Daten werden korrekt angezeigt. Die Daten im Grid können editiert und neue Datensätze eingefügt werden.

    Mein Verständis ist, dass die Entität beim Load-Event gefüllt wird und die im Datagrid vorgenommenen Änderungen in der Entität ebenfalls vorgenommen werden.

    D.h. der "context" auch geändert worden ist.

    Im Close-Event des Formulars rufe ich conext.SaveChanges() auf. Danach  this.Dispose(). Und siehe da, die Änderungen werden nicht in die Datenbank geschrieben.

    Ich möchte gerne die Funktionalität des EF nutzen, da ich die "automatische" Benutzung der Stored Procedures recht gut finde.

    Kann mir jemand aufzeigen, wie ich auf den geänderten Context im Close-Ereignis zugreifen, und die vorgenommenen Änderungen in die Daatenbank schreiben kann?

     

    2.) In der oben angesprochenen Tabelle sind Spalten, wie ChangeUser, ChangeDate etc. Diese Spalten befinden sich in allen Tabellen der Daatenbank, und damit auch im EDM. Z.Zt lasse ich die für die Form nicht  notwendigen Spalten nicht anzeigen. Nehme ich als Datasource für ein Grid wieder eine LINQ-Query laufe ich in das gleiche Problem wie oben unter 1.) beschrieben.

    Mein Ziel ist es, über eine Linq-query nur bestimmte Spalten aus Entitäten auslesen, in einem Grid anzeigen und bearbeiten lasse, und dann in einem Rutsch die vorgenommenen Änderungen, unter Nutzung des EF in die Datenbank wegzu schreiben.

     

    Danke im Voraus.


    A_SqlDeveloper
    Dienstag, 22. Juni 2010 20:51

Antworten

  • Hallo,

    irgendwie fehlt mir hier der Zusammenhang zu den genannten Stored Procedures.
    Wenn Du SPs einsetzen, willst so sei Dir das unbenommen. Das sie wie gewünscht
    funktionieren, solltest Du unabhängig von der Oberfläche anhand von Unit Tests etc.
    sicher stellen.

    zu 1.) Speichern solltest Du im FormClosing Ereignis , denn ein FormClose ist etwas spät,
    um noch auf allfällige Probleme, wie Timeouts, Konflikte zu reagieren.
    Dort hast Du die Möglichkeit das Schliessen durch Setzen von Cancel abzubrechen,
    und z. B. den Anwender Korrekturen vornehmen zu lassen.

    zu 1.+2.)
    Zu dem nicht passierenen Speichern kann man mangels Information wenig sagen.
    Solange Du den ObjectContext offen hälst, bleiben die Entitäten damit verbunden.
    Es spielt keine Rolle, welche der Spalten Du anzeigst.
    Wenn die (unbekannten) Prozeduren die Spalten ChangeUser, ChangeDate verändern,
    so sollten sie zurückgeliefert werden und entsprechend als Ausgabe gemappt,
    damit die Daten im Modell aktualisiert werden.

    Gruß Elmar

     

    Donnerstag, 24. Juni 2010 09:53
    Beantworter