Frage

Ich habe eine viele zu viele Beziehung zwischen einem Team und einem Mitarbeiter Einheit.

I kartiert sie wie folgt vor:

public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        // identifier mapping
        Id(p => p.Id).Column("EmployeeID");

        // column mapping
        Map(p => p.EMail);
        Map(p => p.LastName);
        Map(p => p.FirstName);

        // relationship mapping
        HasManyToMany(m => m.Teams).Table("EmployeeTeam")
            .Inverse()
            .Cascade.All()
            .AsSet()
            .LazyLoad()
            .ParentKeyColumn("EmployeeID")
            .ChildKeyColumn("TeamID");

        HasMany(p => p.LoanedItems).Cascade.SaveUpdate().KeyColumn("EmployeeId");
    }
}

public class TeamMap : ClassMap<Team>
{
    public TeamMap()
    {
        // identity mapping
        Id(p => p.Id).Column("TeamID");

        // column mapping
        Map(p => p.Name);

        // relationship mapping
        HasManyToMany(m => m.Employees)
            .Table("EmployeeTeam")
            .LazyLoad()
            .Cascade.All()
            .AsSet()
            .ParentKeyColumn("TeamID")
            .ChildKeyColumn("EmployeeID");
    }
}

Dann habe ich 3 Teams und 2 Mitarbeiter:

TeamID  EmployeeID
1       1
1       2
2       2
3       1

Die Employee1 hat auch 2 LoanedItems (Bücher, Zeitschriften). Employee2 hat keine LoanedItems.

Jetzt möchte ich Employee1 löschen, die in Team1 und Team3 ist. In Team 1 ist auch Employee2. Also, wenn ich Employee1 löschen, gehe ich davon aus, dass Employee1 gelöscht und auch Team3, weil ich auch davon ausgehen, dass ein Team-nur existieren kann, wenn er eine Employe hat und umgekehrt. So werden Team1 kann nicht gelöscht werden, weil es Employee2 hat und kann immer noch existiert.

Ich habe die folgenden Codezeilen mit einer neuen Sitzung:

var loadedEmployee = session.Get<Employee>(1);
session.Delete(loadedEmployee);
transaction.Commit();

Aber was passiert? -> NHibernate löscht alle Teams und alle Mitarbeiter ! -.> NHibernate aktualisiert meine LoanedItem Tabelle korrekt durch den FK EmployeeID auf NULL Einstellung

Was ist falsch?

War es hilfreich?

Lösung

Ich habe eine ähnliche Frage hier beantwortet: Was ist der richtige Weg, viele-zu-viele-Beziehungen in NHibernate zu ermöglichen Löschungen aber vermeiden doppelten Datensätze

zu definieren,

Lesen Sie die Frage und meine Antwort vielleicht hilft Ihnen verstehen, was mit Ihrem many-to-many Verein los ist.

Andere Tipps

Aufgrund des Cascade.All auf der HasManyToMany Zuordnung.

Verwenden Cascade.SaveAndUpdate stattdessen, wenn Sie die Lösch Kaskade Aktion zu vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top