Nhibernate 一对多 主键为assigned时 保存父 为何子的操作是UPDATE 而不是INSERT

BoyPlusPlus 2008-02-19 01:05:40
代码大意
parent p = new parent
p.id =1;

child c = new child
c.id=2
c.parent =p
p.child.add(c);

session.save(p)

生成SQL操作
NHibernate: INSERT INTO 创建父
NHibernate: UPDATE 更新子
报错。

如果主键是GUID实体自行创建的话就没问题,都是insert

是什么原因?
...全文
258 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackeyabc 2011-11-11
  • 打赏
  • 举报
回复
adfagadsg
踏雪听雨 2008-02-29
  • 打赏
  • 举报
回复
是不是你的类对应的XML文件属性不对呀
BoyPlusPlus 2008-02-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/maplye/archive/2006/07/04/442333.html
刚查到一个,情况一样的,描述的更清楚一些。

是不是一对多关联的,不能从实体外面赋主键值?
BoyPlusPlus 2008-02-19
  • 打赏
  • 举报
回复
就是一对多的关联

  
TestParent p = new TestParent();
p.ID = "p1";
p.Name = "ppp";

TestChild c = new TestChild();
c.ID = "c1";
c.Name = "ccc";

//建立关系
c.TestParent = p;
p.AddTestChild(c);

srv.TestDAO.Session.Save(p);


执行的SQL 为:
NHibernate: INSERT INTO Northwind.dbo.Test_Parent (name, id) VALUES (@p0, @p1); @p0 = 'ppp', @p1 = 'p1'
NHibernate: UPDATE Northwind.dbo.Test_Child SET name = @p0, p_id = @p1 WHERE id = @p2; @p0 = 'ccc', @p1 = 'p1', @p2 = 'c1'

nhibernate 将child对象,没判断出是新建的,而是根据ID去更新了。

如果,主键配置为 generator class="guid" 或者 自增型 就不会出现这个问题。
zhuanshen712 2008-02-19
  • 打赏
  • 举报
回复
描述的不太清楚。

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧