`
maplye
  • 浏览: 112004 次
  • 来自: ...
社区版块
存档分类
最新评论

NHibernate中使用generator为assigned的问题

    博客分类:
  • .NET
阅读更多
Hibernate version:
1.0.2.0
Mapping documents:
Parent.hbm.xml 
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
  
<class name="HYLQ.Core.Domain.Parent, HYLQ.Core" table="Parent">
    
<id name="Id" column="Id" unsaved-value="0">
      
<generator class="assigned" />
    
</id>
    
<property name="Title" type="String" length="200" />

    
<bag name="Childs" lazy="true" table="Child" inverse="true" cascade="all" 
            access
="NHibernate.Generics.GenericAccessor, NHibernate.Generics" >
      
<key column="pid" />
      
<one-to-many class="HYLQ.Core.Domain.Child, HYLQ.Core" />
    
</bag>
    
  
</class>
</hibernate-mapping>


Child.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
  
<class name="HYLQ.Core.Domain.Child, HYLQ.Core" table="Child">
    
<id name="Id" column="Id" unsaved-value="0">
      
<generator class="assigned" />
    
</id>
    
<property name="Memo" type="String" length="200" />
    
<many-to-one name="Parent" column="pid" class="HYLQ.Core.Domain.Parent, HYLQ.Core"
            access
="NHibernate.Generics.GenericAccessor, NHibernate.Generics" />
  
</class>
</hibernate-mapping>

测试代码:
using (ISession session = TestCategory.Factory.OpenSession())
            
{
                int id = 1;

                Parent parent = new Parent();

                parent.Id = id;
                parent.Title = "tetetet";

                Child child = new Child();
                child.Id = 1;
                child.Memo = "222";
                child.parent = parent;

                parent.Childs.Add(child);

                ITransaction trans = session.BeginTransaction();

                try
                {
                    session.Save(parent);
                    trans.Commit();
                }
                catch
                {
                    trans.Rollback();
                    throw;
                }
            } 

当我设置了
chilid.Id =1的时候,则出现了
Test method TestProject1.TestCategory.AddParentChild threw exception: NHibernate.HibernateException: SQL insert, update or delete failed (expected affected row count: 1, actual affected row count: 0). Possible causes: the row was modified or deleted by another user, or a trigger is reporting misleading row count..
跟踪执行的SQL语句后,发现并不是Insert Child,而是Update Child。
当我将chilid.Id =1注释后,就正常,不过chilid.Id他用 unsaved-value="0"代替。
执行的SQL语句都是正常的。

而我在网上看到一些One2Many的例子中其中表的主键都是自增长的后非assigned的。
所以这个问题很是困惑,最后,自己写了一个自定义的Generator来生产ID,
后来就没有出现上述的情况了。

你们碰到过这种情况吗?



分享到:
评论

相关推荐

    Nhibernate使用教程中文文档

    Nhibernate使用教程中文文档,Nhibernate使用教程中文文档

    NHibernate中文文档

    对于以数据为中心的程序,开发人员往往是在数据库中使用存储过程来实现商业逻辑,这种情况下NHibernate可能不是最好的解决方案,但对于那些基于.NET,并且能够实现OO业务模型和商业逻辑的中间层应用,NHibernate是最...

    NHibernate 中文文档教程

    Kiler博客翻译的NHibernate中文技术文档教程 附有原来的英文的NHibernate文档

    NHibernate中文帮助手册API

    NHibernate 参考文档手册 chm,NHIBERNATE-符合.Net习惯的关系数据库持久化,手册目录摘要:  前言  1. 第一个NHibernate应用程序  1.1. 开始NHibernate之旅  1.2. 第一个持久化类  1.3. 映射cat  1.4. ...

    NHibernate2.0中文文档

    NHibernate2.0中文文档 NHibernate2.0中文文档 NHibernate2.0中文文档

    nhibernate 源码nhibernate 源码

    nhibernate 源码nhibernate 源码nhibernate 源码nhibernate 源码

    NHibernate中的Session示例源代码

    NHibernate中的Session示例源代码,适合对NHibernate的使用有一定的了解,并想了解NHibernate源代码及其软件结构的人。

    NHibernate中文API

    NHibernate的中文API,,有用的可以看看~

    nhibernate

    nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#nhibernate c#

    nhibernate在.net使用sqlite数据库

    一切准备就绪后,开始,编译运行,出现问题了,报一个什么finsalConnection无法转变为IDBConnection, 在网上查资料,搞了半天,网上说什么sqlite的dll有多个,要用什么旧的那个dll,谁知哪个,生气中. 去运动运动,回来收拾里!...

    NHibernate 中文文档

    NHibernate 中文文档 中文手册,英语不太好的朋友可以参考

    Fluent nHibernate

    Fluent nHibernate就是为简化nHibernate的配置而诞生,使用Fluent nHibernate可以使nHibernate的配置工作用C#代码完成,而无需用实体的XML文件,极大的方便是用nHibernate的工作量。 本文件于2012-5-4下载于Fluent ...

    NHibernate3.2 官方源代码 + 使用例子

    NHibernate3.2 官方源代码 + 使用例子 NHibernate3.2 官方源代码 + 使用例子 NHibernate3.2 官方源代码 + 使用例子 NHibernate3.2 官方源代码 + 使用例子 NHibernate3.2 官方源代码 + 使用例子

    NHibernate中文帮组文档(2008.11月更新)

    NHIBERNATE - 符合.Net习惯的关系数据库持久化 NHibernate参考文档 2.0.0 -------------------------------------------------------------------------------- 目录 前言 1. 第一个NHibernate应用程序 1.1. ...

    NHibernate参考文档 2.0(中文)

    本手册是使用NHibernate时手头必备的快速参考,是中文版,希望对大家有所帮助

    Nhibernate从入门到精通

    NHibernate 入门之旅教程 PDF版,写这个小书也算是对自己学习NHibernate的一个总结吧。再次向对NHibernate陌生的朋友介绍一下NHibernate,它是一个面向.NET 环境的对象/关系数据库映射工具。用来把对象映射到基于SQL...

    NHibernate Mapping Generator

    A simple utility to generate NHibernate mapping files and corresponding domain classes from existing DB tables. Features: 1. Supports Oracle, SqlServer, PostgreSQL, MySQL, SQLite, Sybase, Ingres, ...

    c# Nhibernate 使用实例

    提供WinForm和web例子 同时提供一个代码生成器

    Nhibernate 中文文档

    Nhibernate 中文文档~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    NHibernate-2.1.2.GA-bin NHibernate框架

    使用与.net开发的NHibernate框架,这个版本是比较老,但是比较经典的。 我也是使用这个来在.net开发的。给大家共享一下。

Global site tag (gtag.js) - Google Analytics