gpt4 book ai didi

c# - nhibernate 3.3 一对多代码映射更新 child 而不是插入

转载 作者:太空狗 更新时间:2023-10-30 00:24:47 26 4
gpt4 key购买 nike

我有这个一对多的关联,我用“旧的”nhibernate 或 fluent 创建了无数次。但是我不能让它与代码映射一起工作

这些是类

 public class Parent
{
public virtual IList<Child> Children { get; set; }
}

public class Child
{
public virtual Parent Parent { get; set; }
}

没什么奇怪的

这些是映射类

家长:

 Bag(x => x.Parent, m => m.Key(k => k.Column("Parent_id")));

child :

 ManyToOne(x => x.Children, map => { map.Column("Parent_id"); map.Cascade(Cascade.All); });

如果我执行以下操作

 var parent = new Parent();
parent.Children.Add(new Child());

session.SaveOrUpdate(parent);

我为 parent 得到了正确的插入,但它对添加的任何 child 进行了更新

UPDATE TableChildren
......
WHERE Id = 0 <-????

我错过了什么?我在敲我的头!!

最佳答案

我看到两个问题。映射似乎是颠倒的(Bag 应该用于 ChildrenManyToOne 用于 Parent)。这里必不可少的设置也是inverse="true"

详细记录在这里:

Children 应该像这样映射:

Bag(x => x.Children, map => {
map.Inverse(true);
map.Cascade(Cascade.All);
map.Key(k => k.Column("Parent_id"));
});

父类是这样的

ManyToOne(x => x.Parent, map => 
{
map.Column("Parent_id");
});

inverse="true" 是一种指导 NHibernate 的方式,每个 child 都可以管理自己。所以,一旦 child 被添加到 Children 集合中,我们还必须设置它的 Parent!然后 NHibernate 将一步插入具有正确引用的子对象。

关于c# - nhibernate 3.3 一对多代码映射更新 child 而不是插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21722011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com