Unterdrücken der Persistenz untergeordneter Objekte im Entity Framework
Im Entity Framework wird im Allgemeinen davon ausgegangen, dass beim Speichern einer Entität die untergeordneten Objekte automatisch als persistent gespeichert werden Also. In bestimmten Szenarien kann es jedoch wünschenswert sein, dieses Verhalten zu verhindern. Dies ist besonders nützlich, wenn es um vereinfachte Daten geht, die möglicherweise nicht direkt dem Datenbankschema entsprechen.
Betrachten wir ein hypothetisches Szenario, in dem eine School-Entität eine City-Eigenschaft enthält. Beim Füllen des School-Objekts aus einer Flatfile kann die City-Eigenschaft auf Nachschlagetabellen verweisen, um geografische Standorte zu bestimmen. Da diese Stadtdefinitionen jedoch bereits in der Datenbank vorhanden sind, ist es für Entity Framework nicht erforderlich, sie beim Speichern der Schule erneut einzufügen.
Um zu verhindern, dass Entity Framework in solchen Situationen untergeordnete Objekte persistiert, gibt es zwei Ansätze :
Ansatz 1: Verwendung von EntityState
Ein Ansatz besteht darin, den EntityState des untergeordneten Objekts manuell auf zu setzen Unverändert. Dadurch wird Entity Framework angewiesen, das untergeordnete Objekt während des Speichervorgangs zu ignorieren. Hier ist ein Beispiel:
using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); // Set the City property to Unchanged context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); }
Ansatz 2: Fremdschlüssel verwenden
Ein eleganterer und flexiblerer Ansatz besteht darin, die Fremdschlüsseleigenschaft in Ihrer Entitätsdefinition zu verwenden. Definieren Sie ein Fremdschlüsselattribut für die untergeordnete Eigenschaft, um deren Beziehung zur fremden Entität explizit anzugeben. Beispiel:
public class School { [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } }
Mit diesem Ansatz können Sie den Fremdschlüsselwert explizit während der Objekterstellung angeben und Entity Framework darüber informieren, dass das untergeordnete Objekt bereits beibehalten wurde. Die City-Eigenschaft kann aus dem Kontextdiagramm weggelassen werden, indem sie beim Speichern auf Null gesetzt wird:
newItem.City = null; context.Set<School>().Add(newItem); context.SaveChanges();
Durch die Verwendung eines dieser Ansätze können Sie verhindern, dass Entity Framework versucht, untergeordnete Objekte zu speichern, und so sicherstellen, dass nur die Die gewünschten Entitäten werden in der Datenbank gespeichert.
Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass Entity Framework untergeordnete Objekte persistiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!