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

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 是一个流行的开源对象关系映射(ORM)框架,专为.NET平台设计。这个框架允许开发人员将.NET类与数据库表进行映射,从而在处理数据库操作时减少手动编写SQL语句的工作量。通过使用NHibernate,我们可以...

    Nhibernate使用教程中文文档

    **Nhibernate** 是一个流行的对象关系映射(ORM)框架,用于.NET应用程序,它允许开发者使用面向对象的方式操作数据库,而无需关心底层的SQL语法。本教程将深入介绍Nhibenate的核心概念、配置、实体映射以及如何在...

    NHibernate中文文档

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

    c# Nhibernate 使用实例

    本实例将带你深入理解C#与NHibernate的结合使用,包括在WinForm和Web应用中的实践,以及如何使用代码生成器提高开发效率。 **一、NHibernate基本概念** 1. **实体(Entities)**: 在ORM中,实体对应数据库中的表,...

    NHibernate中文API

    在提供的NHibernate.chm文件中,包含了NHibernate的中文文档,涵盖了上述所有概念的详细解释,以及更多高级特性和最佳实践,对于学习和使用NHibernate是非常宝贵的资源。通过深入学习这个API,开发者能够更高效地...

    NHibernate中文帮助手册API

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

    NHibernate2.0中文文档

    NHibernate 是一个流行的开源对象关系映射(ORM)框架,主要应用于.NET环境,尤其是与ASP.NET结合使用。它简化了数据库交互的过程,允许开发者用面向对象的方式处理数据,而无需直接编写SQL语句。在NHibernate2.0...

    NHibernate帮助手册

    在 NHibernate 示例中,数据访问层使用 NHibernate 来处理数据库交互,业务逻辑层处理业务规则,而表示层负责用户界面和与用户的交互。 使用 NHibernate 可以极大地提高开发效率,但同时也需要注意性能优化,例如...

    NHibernate参考文档 2.0(中文)

    本参考文档2.0版本为中文版,旨在帮助中文开发者更好地理解和应用NHibernate。 1. **对象关系映射(ORM)**:ORM是一种技术,它在对象模型和关系数据库之间建立桥梁,使得开发者可以使用面向对象的方式来处理数据库...

    NHibernate 中文文档

    NHibernate 是一个强大的对象/关系映射(ORM)框架,专为.NET环境设计,它简化了数据库操作,将对象模型与关系数据库之间的转换自动化。在本文档中,我们将深入理解NHibernate的体系结构、核心组件以及配置选项。 ...

    nhibernate在.net使用sqlite数据库

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

    Nhibernate 中文文档

    NHibernate是一款开放源代码的对象关系映射(ORM)框架,它为.NET平台上的应用程序提供了强大的持久化服务。NHibernate的核心在于将面向对象模型与关系型数据库之间的映射自动化,使得开发人员能够专注于业务逻辑的...

    NHibernate-2.1.2.GA-bin NHibernate框架

    1. **对象关系映射**:NHibernate 提供了一种方式,将数据库中的表映射为 .NET 类,反之亦然。这样,开发者可以通过操作对象来实现对数据库的操作,而无需编写 SQL 语句。 2. **自动数据持久化**:当对象的状态改变...

    C# NHibernate 使用

    在.NET环境中,NHibernate是一个非常流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程语言(如C#)来操作数据库,而无需关心底层SQL语句的编写。这篇教程将深入探讨如何在C# WinForm应用中有效地使用...

    NHibernate-4.1.1.GA-bin

    【标签】"NHibernate c#" 暗示这个压缩包是为使用 C# 语言开发的项目设计的,因为 NHibernate 提供了对 C# 的支持,使得C#开发者可以利用其ORM功能。 【压缩包子文件的文件名称列表】中的文件如下: 1. **readme....

    nhibernate

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

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

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

    NHibernate中文参考文档

    NHibernate 是一个流行的开源对象关系映射(ORM)框架,专为.NET 平台设计,它简化了数据库操作,使得开发人员可以使用面向对象的编程模型来处理数据库交互。中文参考文档提供了对 NHibernate 体系结构和用法的详细...

Global site tag (gtag.js) - Google Analytics