我有一个父类Parent,它与子类Child有一对一的关系。
当我添加一个新的Parent时,我想同时将一个Child添加到父级。
以下是我的课程:
public class Parent
{
public virtual int Id { get; }
public virtual Child Child { get; set; }
}
public class Child
{
public virtual int Id { get; }
public virtual Parent Parent { get; set; }
}
我正在使用NHibernate和这里概述的HasOne / one-to-one映射: https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping
以下是我的AddParentRequestHandler中的Handle()方法的代码:
var parent= new Parent();
var child = new Child()
{
Parent = parent;
};
parent.Child = child;
session.Save(parent);
执行此操作时,我收到以下错误: 无法将值NULL插入列'ChildId',表'dbo.Parent';列不允许空值。 INSERT失败。
Parent上的ChildId和Child上的ParentId都不是可空字段。
有没有办法解决这个问题,仍然保持这些字段不可为空? 提前谢谢。
答案 0 :(得分:0)
当我添加一个新的Parent时,我想同时将一个Child添加到父级。
您需要做的就是将'Child'对象存储为'Parent'类中的变量,并在'Parent'构造函数中创建一个新的'Child'实例
private Child child;
public Parent (){
...
child = new Child();
}
答案 1 :(得分:0)
我需要做两件事来解决这个问题。
首先,我从架构中的Parent表中删除了ChildId列。
然后,我移动了session.Save在我分配子代码的代码上方:
var parent= new Parent();
session.Save(parent);
parent.Child = new Child
{
Parent = parent;
};
所以现在我没有任何可空的Id字段,并且可以将父节点与子节点持久存在。