возникли небольшие проблемы с отображением для следующей настройки таблицы:
Shop
[1] [1]
/ \
[n] [n]
Category-[m]---[n]-Article
Поведение должно быть следующим:
1 - при удалении магазина должны быть удалены все статьи и категории
2 - при удалении категории связанные статьи должны быть неназначенными, но не удаляться
3 - при удалении статьи связанные категории должны быть неназначенными, но не удаляться
Вот текущее отображение:
public class ShopMap: ClassMap<Shop>
{
public ShopMap()
{
this.Table("shop");
Id(x => x.Id).Column("id").GeneratedBy.Native();
Map(x => x.Name).Column("name");
HasMany(x => x.Categories).Cascade.AllDeleteOrphan;
HasMany(x => x.Articles).Cascade.AllDeleteOrphan;
}
}
public class CategoryMap: ClassMap<Category>
{
public CategoryMap()
{
this.Table("category");
Id(x => x.Id).Column("id").GeneratedBy.Native();
Map(x => x.Name).Column("name");
References(x => x.Shop);
HasManyToMany(x => x.Articles).Cascade.AllDeleteOrphan()
.Table("article_category")
.ChildKeyColumn("article_id")
.ParentKeyColumn("category_id")
.Inverse();
}
}
public class ArticleMap: ClassMap<Article>
{
public ArticleMap()
{
this.Table("article");
Id(x => x.Id).Column("id").GeneratedBy.Native();
Map(x => x.Name).Column("name");
References(x => x.Shop);
HasManyToMany(x => x.Categories).Cascade.All()
.Table("article_category")
.ParentKeyColumn("article_id")
.ChildKeyColumn("category_id");
}
}
При удалении категории (Session.Delete ()) NH также пытается удалить связанные статьи.Изменение каскадного режима на SaveUpdate исправит это, но оставит записи в таблице ссылок * article_category *.Подводя итог: Cascade.SaveUpdate слишком ленив, Cascade.All слишком нетерпелив.
Я перепробовал все, что мне пришло в голову в сопоставлениях, но не смог найти правильный способ отобразить это (довольно простая схема).
Любые идеи о том, как (свободно) отобразить это, будут высоко оценены!
Заранее спасибо
Себи