Domanda

Ho molte o molte relazioni tra una squadra e un'entità dipendente.

Li ho mappati come segue:

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");
    }
}

Quindi ho creato 3 team e 2 dipendenti:

TeamID  EmployeeID
1       1
1       2
2       2
3       1

The Employee1 ha anche 2 LoanedItems (Libri, Riviste). Employee2 non ha oggetti in prestito.

Ora voglio eliminare Employee1, che è in Team1 e Team3. Nel Team 1 c'è anche Employee2. Quindi, quando elimino Employee1, presumo che Employee1 sia eliminato e anche Team3, poiché presumo anche che un Team possa esistere solo quando ha un Employe e viceversa. Quindi Team1 non può essere eliminato, perché ha Employee2 e può ancora esistere.

Ho usato le seguenti righe di codice con una nuova sessione:

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

Ma cosa succede? - > NHibernate elimina tutte le squadre e tutti i dipendenti ! - > NHibernate ha aggiornato correttamente la mia tabella LoanedItem impostando FK EmployeeID su NULL.

Cosa c'è che non va lì?

È stato utile?

Soluzione

Ho risposto a una domanda simile qui: What è il modo corretto di definire relazioni molti-a-molti in NHibernate per consentire l'eliminazione ma evitando record duplicati

Leggere la domanda e la mia risposta forse ti aiuterà a capire cosa sta succedendo nella tua associazione molti-a-molti.

Altri suggerimenti

A causa di Cascade.All sulla mappatura HasManyToMany.

Utilizza invece Cascade.SaveAndUpdate, se desideri evitare l'azione di eliminazione in cascata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top