マッピングを機能させるには、以下のコードに従って、タイプのプロパティをクラスone-to-one
に追加する必要があります。NHibernate は一方向の 1 対 1 をサポートしていないため、これらの参照は両方のクラスで必要です。B
A
public class A
{
public virtual int Id {get;set;}
public virtual string P1 {get;set;}
public virtual string P2 {get;set;}
public virtual string P3 {get;set;}
public virtual B child { get; set; }
}
public class B
{
public virtual int Id {get;set;}
public virtual string P4 {get;set;}
public virtual string P5 {get;set;}
public virtual string P6 {get;set;}
public virtual A parent;
}
次に、流暢なマッピングで、次を追加する必要があります
public AMap()
{
/* mapping for id and properties here */
HasOne(x => x.child)
.Cascade.All();
}
public BMap()
{
/* mapping for id and properties here */
References(x => x.parent)
.Unique();
}
の 1 対多のマッピングBMap
は としてマークされていることに注意してくださいUnique
。これは、NHibernate を使用して DB スキーマを生成する場合に、一意の列制約を作成するために使用されます。
新しいレコードを作成するには、次のように記述します。
using (var transaction = session.BeginTransaction())
{
var classA = new A();
classA.child = new B() { parent = classA};
session.Save(owner);
transaction.Commit();
}
最後に、NHibernate の現在のリリースである 3.4 は、孤立した 1 対 1 のカスケード削除をサポートしていません。バグレポートについては、こちらを参照してください。これは、次のように記述した場合session.Delete(classA);
、関連するクラス B レコードが自動的に削除されないことを意味します。