0

ステートレス セッションを使用している間は、オブジェクトの関連付け (子) を明示的に保存する必要があることを理解しています

次のオブジェクトがある場合:

public class Parent()
{
    public int Id {get;set;}
    public string Name {get;set;}
    public IList<Child> Childs {get;set;}
}

public class Child()
{
    public int Id {get;set;}
    public string Name {get;set;}
}

親のインスタンスを変更してそれに子を 1 つ追加し、次のステートメントを使用して親と子を保存します。

statelesssession.Update(parentInstance);
statelesssession.Insert(parentInstance.Childs.Last());

これを行うと、親が正常に更新され、子レコードが作成されますが、子テーブルのフィールド Parent_Id は null のままであるため、関連付けは記録されません。

ステートレス セッションを使用してアソシエーションを手動で記録するにはどうすればよいですか?

4

1 に答える 1

0

を指すmany-to-oneプロパティがにありません。これは、NHibernate が列を保存するために使用するものです。必要なもの:ChildParentParent_id

public class Child
{
    public int Id {get;set;}
    public Parent Parent {get;set;} // this is missing
    public string Name {get;set;}
}

... および対応する NHibernate マッピング。また、child.Parent子を親に追加するときに必ず の値を設定してください。

もう1つのことは、あなたが説明した一連のイベント(「親のインスタンスを作成し、それに子を1つ追加する」)を考えるとInsert、親の代わりにUpdate.

于 2011-09-08T21:15:34.993 に答える