2

コレクションを FNHib 自動マッピングでマッピングしようとしています。私が解決したい問題は次のとおりです。

1) プロジェクト内のすべてのコレクションをプライベート フィールド経由でマップしたい。それを世界的にどう言えばいいの?

2)各エンティティを明示的にオーバーライドせずに双方向の関係を自動マップする方法はありますか?

クラス OrganizationEntity の例:

private ISet<> _collectionWarehouse;
public virtual IEnumerable<WarehouseEntity> CollectionWarehouse
{

get{return _collectionWarehouse; }

set{_collectionWarehouse = new HashedSet<WarehouseEntity>((ICollection<WarehouseEntity>)value)}

}

クラス WarehouseEntity の例:

public virtual OrganizationEntity Organization{get;set;}
4

1 に答える 1

3

次の規則を使用して、コレクションを「グローバルに」プライベートフィールドにマップできます。

// assumes camel case underscore field (i.e., _mySet)
public class CollectionAccessConvention : ICollectionConvention
{
    public void Apply(ICollectionInstance instance) {
        instance.Access.CamelCaseField(CamelCasePrefix.Underscore);
    }
}

FNHで「グローバル」オートマッププリファレンスを設定する場合は常に、規則を考えてください。必要に応じて、特定のクラスマップでIAutoOverrideを使用します。

セット(通常はHashSetも必要です)の部分がある限り、最後にマッピングを行う必要があったときは、次のようなオーバーライドを行う必要がありました。

   public class ActivityBaseMap : IAutoMappingOverride<ActivityBase>
{
    public void Override(AutoMapping<ActivityBase> m)
    {
        ...
        m.HasMany(x => x.Allocations).AsSet().Inverse();

    }
}

私はそれが慣習に変換されるべきであることに同意します、そして多分あなたは最近それをすることができます。わかりましたら投稿してください。

HTH、
ベリール

ハッシュセットをICollectionとして使用するためのコード=================

public virtual ICollection<WarehouseEntity> Wharehouses
{
    get { return _warehouses ?? (_warehouses = new HashSet<WarehouseEntity>()); }
    set { _warehouses = value; }
}
private ICollection<WarehouseEntity> _warehouses;
于 2010-07-09T20:31:55.440 に答える