使用一对一子项添加Parent实例

时间:2017-11-02 16:50:49

标签: c# nhibernate fluent-nhibernate

我有一个父类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都不是可空字段。

有没有办法解决这个问题,仍然保持这些字段不可为空? 提前谢谢。

2 个答案:

答案 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字段,并且可以将父节点与子节点持久存在。