親と子のテーブルと、それらの間の関係を維持する ParentChild テーブルがあるとしましょう。
親クラス:
public class Parent
{
public virtual int ParentId { get; set; }
public virtual bool Deleted { get; set; }
public Parent()
{
_children = new HashedSet<Child>();
}
protected ISet<Child> _children;
public virtual ISet<Child> children
{
get { return _children; }
protected set { _children = value; }
}
}
子クラス:
public class Child
{
public virtual int ChildId { get; set; }
public virtual bool Deleted { get; set; }
public Child()
{
_parents = new HashedSet<Parent>();
}
protected ISet<Parent> _parents;
public virtual ISet<Parent> parents
{
get { return _parents; }
protected set { _parents = value; }
}
}
および ParentChild クラス:
public class ParentChild
{
public virtual int ParentChildId { get; set; }
public virtual Parent Parent { get; set; }
public virtual Child Child { get; set; }
public virtual int DisplayOrderIndex { get; set; }
public virtual bool Deleted { get; set; }
}
これらをマップして、親オブジェクトを更新し、ジャンクション テーブルを追加データ (親/子 ID だけでなく) と子テーブルで更新できるようにするにはどうすればよいでしょうか。
今のところ、私はやっています:
親マップ
public ParentMap()
{
Table("Parent");
Id(x => x.ParentId);
Map(x => x.Deleted);
HasMany(x => x.ParentChild)
.Table("Parent_Child")
.KeyColumn("ParentID")
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.AllDeleteOrphan()
.LazyLoad();
}
子マップ
public ChildMap()
{
Table("Child");
Id(x => x.ChildId);
Map(x => x.Deleted);
HasMany(x => x.ParentChild)
.Table("Parent_Child")
.KeyColumn("ChildID")
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.AllDeleteOrphan()
.LazyLoad();
}
親子マップ
public ParentChildMap()
{
Table("Parent_Child");
Id(x => x.ParentChildId, "Parent_ChildID");
References(x => x.Parent, "ParentID");
References(x => x.Child, "ChildID");
Map(x => x.DisplayOrderIndex);
Map(x => x.Deleted);
}
しかし、Parent リポジトリからプルすると、Parent オブジェクトの ParentChild コレクションの Child は、Child タイプではなく Castle.Proxy になります。
望ましい結果を得るには、このマッピングをどのように行う必要がありますか?