Когда я очищаю дочернюю коллекцию, как это
table.Indizes.Clear();
session.Flush();
, тогда NH генерирует SQL удаления для каждого элемента, который был в коллекции:
DELETE FROM x_inddef WHERE ind_name = 'IDX_ADRKONZ_CODE'AND tbl_name =' ADRESSE 'УДАЛИТЬ ИЗ x_inddef WHERE ind_name =' IDX_ADRKUND_EXT 'И tbl_name =' ADRESSE '
...
Почему он не генерирует подобное утверждение?
DELETE FROM x_inddef WHERE tbl_name = 'ADRESSE'
Что-то не так с моими сопоставлениями или это просто нормальное поведение?
Упрощенный код с быстрым сопоставлением:
public class Table
{
public virtual string Name {get;set;
public virtual IList<Index> Indizes { get; set; }
}
public class TableOverride : IAutoMappingOverride<Table>
{
public void Override(AutoMapping<Table> mapping)
{
mapping.Table("x_tables");
mapping.Id(x => x.Name, "tbl_name");
mapping.HasMany(x => x.Indizes).KeyColumn("tbl_name").Inverse().Cascade.AllDeleteOrphan();
}
}
public class Index
{
public virtual string Name { get; set; }
public virtual Table Table { get; set; }
public override bool Equals(object obj)
{
//...
}
public override int GetHashCode()
{
//...
}
}
public class IndexOverride : IAutoMappingOverride<Index>
{
public void Override(AutoMapping<Index> mapping)
{
mapping.Table("x_inddef");
mapping.CompositeId().
KeyProperty(x => x.Name, "ind_name").
KeyReference(x => x.Table, "tbl_name");
}
}