Fluent NHibernate 規約を使用して、すべての ICollection をセットとしてマップすることは可能ですか?

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

質問

Fluent NHibernate 規約を使用して、すべての ICollection をセットとしてマップすることは可能ですか?次のようなエンティティがあります:

public class NoahsArk
{
    public virtual ICollection<Animal> Animals { get; set; }

    public NoahsArk()
    {
        Animals = new HashSet<Animal>();
    }
}

Fluent マッピングでは、このプロパティは次のようにマッピングされます。 HasMany(x => x.Animals).AsSet(), 、しかし、オートマッパーで使用したい規則でこれを行うにはどうすればよいでしょうか?

デフォルトで追加する必要がありますが、 ICollections として永続化されます ILists, をキャストしようとすると、キャスト例外が発生します。 HashSetIList.

役に立ちましたか?

解決

これは、現在、大会では不可能です。あなたは、デフォルトで設定し、代わりにISetの使用ICollectionとしてあなたのコレクションを治療するためのautomapperをしたい場合。

他のヒント

に応答して クリスティーナの質問, を実装する新しいクラスを作成する必要があります。 IAutoMappingOverride<T>:

public class AlbumOverride : IAutoMappingOverride<Album>
{
    public void Override(AutoMapping<Album> mapping)
    {
        mapping.HasMany(x => x.Pictures).AsSet().Inverse();
    }
}

次に、それを設定で使用するように FNH に指示します。

Fluently.Configure()
    .Database(...)
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
        .UseOverridesFromAssemblyOf<Album>()))
    .BuildConfiguration();

オーバーライドが必要なエンティティごとに新しいオーバーライド クラスが必要になりますが、ほとんどはコピー アンド ペーストの作業です。

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