문제

S#ARP 아키텍처에서 작동하기 위해 M : M Mapings를 얻기 위해 거의 모든 것을 시도했습니다. 불행히도 Northwind 예제 프로젝트에는 M : M 오버라이드가 없습니다.

모두 S#ARP로 변환하기 전에 내 프로젝트에서 잘 작동하고 유창한 nhibernate의 자동 매핑을 선택했습니다. 나는 자동 매핑을 좋아하지만 좋지만 재정의는 등록하지 않는 것 같습니다.

모두 메모리와 테스트에서 작동하는 것처럼 보이지만 데이터베이스에 데이터를 커밋 할 때 M : M 참조 테이블에 아무것도 삽입되지 않습니다.

카테고리의 간단한 샘플을 복용하면 많은 제품을 가질 수 있고 제품은 많은 카테고리에있을 수 있습니다.

내 자동 지속성 모델은 다음과 같이 생성됩니다.

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 매핑을 구조화하는 많은 조합을 시도했지만 아무것도 작동하지 않습니다.

이것 기사 업데이트 FHN과 함께 S#ARP를 재 컴파일하라는 제안이 있지만 이것을 시도했지만 최신 FHN 코드는 S#ARP가 사용하는 것과 크게 다릅니다. 모든 파손 충돌을 수정했지만 여전히 작동하지 않습니다.

바라건대 다른 사람이 M : M 자동 맵핑 재정의 문제를 해결하고 해결하기를 바랍니다.

도움이 되었습니까?

해결책

문제를 해결하고 S#ARP 초보자 오류로 판명되었습니다.

많은 사람들이 저장하려면 컨트롤러 메소드에 [트랜잭션] 속성이 할당되어 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top