Aktualisieren eines Verweises auf ein untergeordnetes Objekt im Entity Framework 4.1 (CodeFirst)

8

Ich versuche ein Objekt zu aktualisieren, das ich zuvor mit EntityFramework 4.1 (CodeFirst) gespeichert habe

Die Klasse Job hat die folgenden Eigenschaften ...

%Vor%

Das anfängliche Erstellen funktioniert einwandfrei, aber das Update schreibt nur Änderungen an den Zeichenfolgen fest.

Wenn ich die untergeordneten Objekte ändere, zB die JobType Eigenschaft von JobTypeA bis JobTypeB - die Änderung wird nicht übernommen ...

Ich möchte JobType nicht ändern - nur Job.

%Vor%

Wenn Sie sich SQL Profiler ansehen - die IDs werden nicht einmal für das Update gesendet - sie sind jedoch für die erste Einfügung!

    
Andy Clarke 21.10.2011, 14:20
quelle

1 Antwort

15

Wenn Sie den Status auf Modified setzen, werden nur skalare und komplexe Eigenschaften aktualisiert, nicht Ihre Navigationseigenschaften. Dies geschieht nur durch Änderungserkennung von Entity Framework. Das bedeutet, dass Sie das Original aus der Datenbank laden müssen:

%Vor%

Sie könnten wahrscheinlich auch einige "Tricks" in Ihrem Fall nutzen:

%Vor%

Es würde jedoch nicht funktionieren, wenn Sie JobType auf null setzen möchten.

Dies ist eine typische Situation, die viel einfacher wird, wenn Sie Fremdschlüssel als Eigenschaften in Ihrem Modell bereitstellen: Mit einem JobTypeId in Ihrer Entität Job würde Ihr Code funktionieren, da die FK-Eigenschaft skalar ist und den Status auf setzt Modified wird diese Eigenschaft auch als geändert markieren.

    
Slauma 21.10.2011, 16:18
quelle