我有一个像这样声明的对象
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 孩子,这不是我想要的行为。我可以使用的技巧是在创建 new 后将孩子重置为空MyObject
,但我想看看是否有更好的方法。
Child 在我的对象中需要不为 null,但如果子对象的 ID 为 0,则保存为 null。
编辑
只是在测试整个 null/reset 策略,但它不起作用。对我模型中任何对象的后续休眠请求会导致瞬态对象错误。