Korrekte Möglichkeit, komplexe Viewmodel-Objekte mit asp.net-mvc2 und Entity-Framework zu bearbeiten und zu aktualisieren

8

Ich habe eine Tabelle in meiner Datenbank mit einer Eins-zu-viele-Beziehung zu einer anderen Tabelle, die eine Beziehung zu einer dritten Tabelle hat:

ParentObject

  • ID
  • Name
  • Beschreibung

Kindobjekt

  • ID
  • Name
  • Beschreibung
  • ParentObjectID
  • AnotherObjectID

AnotherObject

  • ID
  • Name

Die Objekte werden Entity Framework zugeordnet und über eine Datenzugriffsklasse verfügbar gemacht.

Es scheint, dass ViewModels empfohlen wird, wenn sich die anzuzeigenden Daten stark vom Domänenobjekt unterscheiden. Daher habe ich ein ViewModel wie folgt erstellt:

%Vor%

Ich habe eine Ansicht, die eine Liste von ParentObjects anzeigt. Wenn Sie darauf klicken, kann ein ChildObject als gespeichert gespeichert werden.

%Vor%

Das alles funktioniert gut. Meine Frage besteht darin, die EF-Objekte am besten zu aktualisieren und die Änderungen in der Datenbank beizubehalten. Ich habe es zunächst versucht:

%Vor%

Wenn ich versuche, eine Änderung am untergeordneten Objekt zu speichern, erhalte ich diese Ausnahme: Entitäten in "MyEntities.ChildObject" nehmen an der Beziehung "FK_ChildObject_AnotherObject" teil. Es wurde 0 verwandtes 'AnotherObject' gefunden. 1 'AnotherObject' wird erwartet.

Die Untersuchung von StackOverflow und allgemeinem Googeln führte mich dazu, diesen Blogbeitrag das scheint mein Problem zu beschreiben: TryUpdateModel () behandelt verschachtelte Sammlungen nicht korrekt. Offensichtlich (und das Durchlaufen des Debuggers bestätigt dies) erstellt es ein neues ChildObject, anstatt mit den EF-Objekten aus meinem instanziierten Kontext zu verknüpfen.

Mein hacky Arbeit ist das:

%Vor%

Das scheint gut zu funktionieren. Meine Frage an Sie, gute Leute: Gibt es einen richtigen Weg, dies zu tun? Ich habe versucht, dem Vorschlag zu folgen, ein benutzerdefiniertes Modellbinder für den Blog-Link oben zu machen, aber es hat nicht funktioniert (es gab ein Problem mit der Reflexion, der Code erwartete bestimmte Eigenschaften) und ich musste etwas so schnell wie möglich gehen / p>

PS - Ich habe versucht, den Code zu bereinigen, um bestimmte Informationen zu verbergen, also pass auf, dass ich etwas abgespritzt habe. Ich möchte hauptsächlich nur wissen, ob andere Leute dieses Problem gelöst haben.

    
jslatts 02.04.2010, 22:12
quelle

2 Antworten

1

Schauen Sie sich kurz den Fehler an, der FK_ChildObject_AnotherObject erwähnt ... Sind Sie sicher, dass in Ihrem EF-Datenmodell bezüglich AnotherObject alles richtig verdrahtet ist?

In Ihrer Frage listen Sie nur zwei Tabellen auf, aber dieser Fehler zeigt an, dass das ChildObject an einer Beziehung von 1 zu * mit AnotherObject teilnimmt und keine Entität in der Entität vorhanden ist, die beim Speichern einen Fehler verursacht hat.

Versuchen Sie, AnotherObject aus der Situation zu entfernen, um alle angenommenen Probleme zwischen ParentObject und ChildObject zu testen, oder versuchen Sie, die FK_ChildObject_AnotherObject-Beziehung zum Testen kurz auf 0..1 zu * zu ändern.

    
user308105 03.04.2010 04:01
quelle
0

Sie könnten mit Omu ValueInjector anstelle von tryupdate suchen. Es kann so konfiguriert werden, dass es viel schlauer ist, obwohl ich es nach Konvention bevorzuge.

tbh nicht ganz klar auf die ursprüngliche Frage hier. Ich bin nicht sicher, warum die childobjects in dem Viewmodel an erster Stelle von dem Eltern entfernt werden?

    
DanH 21.10.2011 00:57
quelle