导航
  • 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ
  • 问答

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

是什么原因?
...全文
175 点赞 收藏 5
写回复
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
描述的不太清楚。
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告