質問

S#arp ArchitectureでM:Mマッピングを機能させるために、ほぼすべてを試しました。残念ながら、NorthwindサンプルプロジェクトにはM:Mオーバーライドがありません。

S#arpおよびFluent NHibernateのAutoマッピングの選択に変換する前に、私のプロジェクトですべてが正常に機能しました。私は自動マッピングが好きです、それは良いですが、オーバーライドは登録されていないようです。

それはすべてメモリとテストで動作するようですが、データベースにデータをコミットするとき、M:M参照テーブルには何も挿入されません。

Categoryの単純なサンプルを多数の製品を持つことができ、Productを多数のカテゴリに含めることができる場合、Category_idおよびProduct_id列を持つCategoryProduct(複数形は好きではありません)というテーブルがあります。

私の自動持続モデルは次のように生成します:

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で使用されているものとは大幅に異なります。すべての競合を修正しましたが、まだ動作しません。

うまくいけば、誰かがS#arpのM:M自動マッピングオーバーライドの問題に遭遇し、解決したことを願っています。

役に立ちましたか?

解決

問題を解決できたが、S#arp初心者エラーであることが判明した。

ManyToManyデータを保存するには、コントローラーメソッドに[トランザクション]属性を割り当てる必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top