S # arp Архитектура переопределений сопоставления «многие ко многим» не работает

StackOverflow https://stackoverflow.com/questions/1816342

Вопрос

Я попробовал почти все, чтобы заставить отображения 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].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top