Fluent NHibernate 規約を使用して、すべての ICollection をセットとしてマップすることは可能ですか?
-
22-09-2019 - |
質問
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
, をキャストしようとすると、キャスト例外が発生します。 HashSet
に IList
.
解決
これは、現在、大会では不可能です。あなたは、デフォルトで設定し、代わりに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();
オーバーライドが必要なエンティティごとに新しいオーバーライド クラスが必要になりますが、ほとんどはコピー アンド ペーストの作業です。
所属していません StackOverflow