S # arp Архитектура переопределений сопоставления «многие ко многим» не работает
-
08-07-2019 - |
Вопрос
Я попробовал почти все, чтобы заставить отображения M: M работать в S # arp Architecture. К сожалению, пример проекта Northwind не имеет переопределения M: M.
В моем проекте все работало нормально, прежде чем перейти на S # arp и выбрать Auto Mapping в Fluent NHibernate. Мне нравится автоматическое отображение, это хорошо, но переопределения, похоже, не регистрируются.
Кажется, все работает в памяти и в тестах, однако при фиксации данных в базе данных в мою справочную таблицу M: M ничего не вставляется.
Если мы возьмем простой образец категории, в которой может быть много продуктов, а продукта может быть много, у нас будет таблица CategoryProduct (мне не нравится множественное число), в которой есть столбцы Category_id и Product_id.
Моя модель персистентности Auto генерируется следующим образом:
return AutoPersistenceModel
.MapEntitiesFromAssemblyOf<Category>()
.Where(GetAutoMappingFilter)
.ConventionDiscovery.Setup(GetConventions())
.WithSetup(GetSetup())
.UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();
Переопределение отображения для категории выглядит так:
public class CategoryMap : IAutoMappingOverride<Category>
{
public void Override(AutoMap<Category> mapping)
{
mapping.Id(x => x.Id, "Id")
.WithUnsavedValue(0)
.GeneratedBy.Identity();
mapping.Map(x => x.Name).WithLengthOf(50);
mapping.Map(x => x.Depth);
mapping.HasMany<Category>(x => x.Children)
.Cascade.All()
.KeyColumnNames.Add("Parent_id")
.AsBag()
.LazyLoad();
mapping.HasManyToMany<Posting>(x => x.Products)
.WithTableName("CategoryProduct")
.WithParentKeyColumn("Category_id")
.WithChildKeyColumn("Product_id")
.Cascade.All()
.AsBag();
}
}
И Продукт имеет переопределение сопоставления как таковое:
public class ProductMap : IAutoMappingOverride<Product>
{
public void Override(AutoMap<Product> mapping)
{
mapping.Id(x => x.Id, "Id")
.WithUnsavedValue(0)
.GeneratedBy.Identity();
mapping.Map(x => x.Title).WithLengthOf(100);
mapping.Map(x => x.Price);
mapping.Map(x => x.Description).CustomSqlTypeIs("Text");
mapping.References(x => x.Category).Cascade.All();
mapping.HasMany<ProductImage>(x => x.Images).Inverse().Cascade.All().LazyLoad();
mapping.HasManyToMany<Category>(x => x.Categories)
.WithTableName("CategoryProduct")
.WithParentKeyColumn("Product_id")
.WithChildKeyColumn("Category_id")
.Inverse()
.AsBag();
}
}
Я пробовал много комбинаций структурирования отображений M: M, но ничего не работает.
В этой статье есть предложение повторно Скомпилируйте S # arp с обновлением FHN, я попробовал это, однако последний код FHN сильно отличается от того, который использовался в S # arp. Исправлены все конфликтующие конфликты, но они все еще не работают.
Надеюсь, кто-то еще столкнулся и решил проблемы переопределения автоматического сопоставления M: M с помощью S # arp.
Решение
Удалось решить проблему, что оказалось ошибкой новичка в S # arp.
Для сохранения данных ManyToMany для метода контроллера должен быть назначен атрибут [Transaction]. Р>