У нас есть Продукт , Категория и ProductToCategory классы.
A продукт имеет много ProductToCategories , в категории есть много ProductToCategories .
Продукт включает это свойство
public virtual IList<ProductToCategory> Categories { get; set; }
ProductToCategory
public class ProductToCategory : Entity
{
public virtual Product Product { get; set; }
public virtual Category Category { get; set; }
public virtual bool IsFeatured { get; set; }
}
Категория включает эти свойства
public virtual Category Parent { get; set; }
public virtual IEnumerable<Category> Children { get; set; }
public virtual IEnumerable<ProductToCategory> Products { get; set; }
Нам нужен явный класс ProductToCategory, потому что нам нужно логическое свойство для отношений между продуктами и категориями, чтобы определить, должен ли этот продукт быть представлен на главной странице категории.
Для отображения всего этого используется Fluent NHibernate AutoMapping с некоторыми переопределениями
Переопределение сопоставления продуктов
mapping.HasMany(x => x.Categories)
.Cascade.AllDeleteOrphan()
.Inverse();
Переопределение отображения категории
mapping.HasMany(x => x.Children)
.Cascade.AllDeleteOrphan()
.KeyColumn("ParentId");
mapping.References(x => x.Parent).Column("ParentId");
Переопределение сопоставления товаров в категории
mapping.References(x => x.Category);
Когда я хочу сохранить продукт, мне нужно, чтобы NHibernate удалил все существующие категории ProductToCategories, связанные с продуктом, и добавил те, которые были переданы из пользовательского интерфейса, а также обновил другие свойства продукта, такие как имя, номер детали и т. Д. .
Какой самый краткий способ гарантировать, что NHibernate сохраняет изменения в Продукте (включая связанные ProductToCategories), когда предоставляется экземпляр моего класса Product.