このように宣言されたオブジェクトがあります
public class MyObject
{
public virtual long MyId { get; set; }
public virtual MyChild Child { get; set; }
public MyObject()
{
Child = new MyChild();
}
}
public class MyChild
{
public virtual long MyId { get; set; }
}
モデルにnullではなく空のオブジェクトが必要なため、子に「空のオブジェクト」を設定しています。
私のデータベースには、このようなテーブルがあります
CREATE TABLE MyObjects
(
MyObjectId bigint IDENTITY(1,1) NOT NULL,
ChildId bigint NULL
)
そして、私は私のマッピングに持っています
References<MyChild>(x => x.Child, "ChildId");
ここで問題が発生します。新しい を作成しようとすると、オブジェクトが保存されていない一時的なインスタンスを参照しているMyObject
というエラーが表示されます。だから、私はこれをしました:
var newObject = new MyObject()
{
Child = null
};
repository.Save(newObject);
これは保存に機能しますが、現在、私のオブジェクトにはnullの子があり、これは私が望む動作ではありません. 私が使用できるハックは、新しい を作成した後に子を空にリセットするMyObject
ことですが、より良い方法があるかどうかを確認したいと思います。
子はオブジェクトで null ではない必要がありますが、子オブジェクトの ID が 0 の場合は null として保存されます。
編集
null/reset 戦略全体をテストしただけで、うまくいきません。モデル内のオブジェクトに対する後続の nhibernate リクエストにより、一時的なオブジェクト エラーが発生します。