Я относительно новичок в настройке NHibernate и столкнулся с проблемой.У меня есть следующие объекты:
public class Report
{
public virtual int Id { get; private set; }
public virtual string Name { get; private set; }
public virtual string Path { get; private set; }
public virtual string Alias { get; private set;}
public virtual IList<Tab> Tabs
{
get; private set;
}
}
public class Tab
{
public virtual string Name { get; private set; }
public virtual string Description { get; private set; }
public virtual IList<Section> Sections { get; set; }
public virtual Report ParentReport { get; private set; }
}
public class Section
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
Я использую Fluent NHibernate и Auto Mapping для сопоставления отношений.
.Database(MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(c => c.Is(connectionString)))
.Mappings(map => map.AutoMappings.Add(AutoMap.AssemblyOf<Workbook>(configuration)
.Conventions.AddFromAssemblyOf<CascadeAll>()
Проблема в том, что независимо от того, какие параметры каскада я выберу в своем классе CascadeAll, я не могу заставить его работать так, как мне хотелось бы.
Когда я удаляю вкладку из данного отчета, я хочу удалить разделы на вкладке из базы данных, а затем удалить вкладку из отчета в базе данных.
Cascade.All()
Удаляет связь между отчетом и вкладкой, но при этом значение параметра ParentReport_id для сироты устанавливается равным нулю.
Cascade.AllDeleteOrphan()
При этом удаляются все разделы, вкладки, связанные с отчетом, а затем удаляется отчет, несмотря на удаление только одной вкладки из коллекции в отчете.
Cascade.SaveUpdate()
Действует как Всев том, что это orhpans вкладка.
Между прочим, все они вызываются путем удаления вкладки из коллекции вкладок в Report и последующего вызова session.SaveUpdate (instance)> Где instance - обновляемый экземпляр Report.
Есть идеи, как мне это исправить или что я делаю не так?