Heim > Backend-Entwicklung > C++ > Wie kann ich die Persistenz untergeordneter Entitäten im Entity Framework steuern?

Wie kann ich die Persistenz untergeordneter Entitäten im Entity Framework steuern?

Mary-Kate Olsen
Freigeben: 2025-01-03 06:23:44
Original
280 Leute haben es durchsucht

How Can I Control Child Entity Persistence in Entity Framework?

Grundlegendes zum Standardverhalten von Entity Framework: Persistenz untergeordneter Objekte

Bei der Nutzung von Entity Framework (EF), einem weit verbreiteten objektrelationalen Mapping (ORM )-Framework für .NET ist es wichtig, sich seines Verhaltens in Bezug auf untergeordnete Entitäten bewusst zu sein. Standardmäßig geht EF davon aus, dass beim Speichern einer Entität alle zugehörigen untergeordneten Objekte neben ihr gespeichert werden sollten. Diese Standardaktion kann jedoch zu unerwünschten Konsequenzen führen, insbesondere wenn Sie beabsichtigen, die Persistenz untergeordneter Entitäten zu überspringen.

Gründe für den Ausschluss untergeordneter Entitäten von der Persistenz

Es können Szenarien auftreten wo das Speichern untergeordneter Entitäten unerwünscht ist. Wenn beispielsweise Daten manuell aus externen Quellen wie Flatfiles eingefüllt werden, erfüllen möglicherweise vorhandene Entitäten in der Datenbank bereits die Rollen der untergeordneten Entitäten. Das Einfügen von Duplikaten in die Datenbank kann zu Inkonsistenz- und Integritätsproblemen führen. Darüber hinaus kann das Speichern untergeordneter Entitäten vor der Zuweisung eines Primärschlüssels den ordnungsgemäßen Betrieb von EF beeinträchtigen.

Selektive Persistenz erzwingen: Unveränderter EntityState

Um die Herausforderung zu bewältigen, die Persistenz untergeordneter Entitäten zu überspringen können Sie die Option EntityState.Unchanged nutzen. Indem Sie den Status einer untergeordneten Entität explizit auf „Unverändert“ festlegen, weisen Sie EF an, ihn während des Speichervorgangs zu ignorieren.

Codebeispiel mit EntityState.Unchanged

Bedenken Sie Folgendes Codebeispiel, vorausgesetzt, Sie haben eine Schulentität mit einer untergeordneten Stadtentität:

public School Insert(School newItem)
{
    using (var context = new DatabaseContext())
    {
        context.Set<School>().Add(newItem);
        context.Entry(newItem.City).State = EntityState.Unchanged;
        context.SaveChanges();
        return newItem;
    }
}
Nach dem Login kopieren

Indem Sie den Status der Stadtentität auf festlegen Unverändert schließt EF es vom Speichervorgang aus, sodass die Datenbank unverändert bleibt. Dieser Ansatz erfordert jedoch eine manuelle Handhabung der Zuweisung untergeordneter Entitäten.

Alternative Lösung: Verwendung von Fremdschlüsseln

Eine elegantere und flexiblere Lösung besteht in der Verwendung von Fremdschlüsseln. Durch die Definition einer Fremdschlüsseleigenschaft innerhalb Ihrer untergeordneten Entität geben Sie explizit deren Beziehung zur übergeordneten Entität an. EF verarbeitet dann automatisch den Status der zugehörigen Entität basierend auf der bereitgestellten Referenz.

Codebeispiel mit Fremdschlüsseln

Hier ist eine aktualisierte Version des vorherigen Codebeispiels mit Fremdschlüsseln :

public class School
{
    public int Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("City_Id")]
    public City City { get; set; }

    [Required]
    public int City_Id { get; set; }
}

public School Insert(School newItem, int cityId)
{
    using (var context = new DatabaseContext())
    {
        // Set child entity to null to prevent insertion
        newItem.City = null;
        // Specify foreign key relationship without adding the child entity
        newItem.City_Id = cityId;

        context.Set<School>().Add(newItem);
        context.SaveChanges();
        return newItem;
    }
}
Nach dem Login kopieren

In diesem Fall legen Sie die City_Id manuell fest und machen die City-Referenz ungültig, wodurch Sie EF anweisen, die Verbindung über das Ausland herzustellen Schlüssel, ohne die untergeordnete Entität einzubeziehen. Dieser Ansatz vereinfacht den Code und vermeidet die Notwendigkeit, EntityState manuell zu verwalten.

Fazit

Wenn Entwickler das Standardverhalten von Entity Framework verstehen und die entsprechenden Techniken wie EntityState.Unchanged oder die Verwendung von Fremdschlüsseln verwenden, können sie die Persistenz untergeordneter Entitäten steuern und anpassen, unerwünschte Nebenwirkungen verhindern und die Datenintegrität in ihren Anwendungen sicherstellen.

Das obige ist der detaillierte Inhalt vonWie kann ich die Persistenz untergeordneter Entitäten im Entity Framework steuern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage