0

Fluent NHibernate規則を使用して、すべてのICollectionをセットとしてマップすることは可能ですか?私はそのようなエンティティを持っています:

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

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

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

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

4

2 に答える 2

0

Christinaの質問に答えて、以下を実装する新しいクラスを作成する必要があります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();

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

于 2011-01-24T19:40:13.630 に答える
0

現在、これはコンベンションでは不可能です。オートマッパーがデフォルトでコレクションをセットとして扱うようにしたい場合は、ISet代わりにICollection.

于 2010-01-02T12:10:15.933 に答える