首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在nhibernate中,无法更新子对象列表

在NHibernate中,无法更新子对象列表的问题通常是由于映射配置不正确或者更新操作没有正确实现。以下是一些可能的解决方案:

  1. 检查映射配置:确保子对象列表的映射配置正确,包括关联关系和级联操作。例如,如果你使用的是一对多关系,你需要在主对象的映射中添加<bag><set>元素,并指定cascade属性以确保子对象的更新操作会被级联到主对象。
代码语言:xml<class name="Parent">
复制
  <id name="Id">
   <generator class="identity" />
  </id>
  <bag name="Children" cascade="all">
    <key column="ParentId" />
    <one-to-many class="Child" />
  </bag>
</class>
  1. 更新操作:确保你正确地实现了更新操作。在NHibernate中,你需要使用ISession对象的SaveOrUpdate()方法来更新对象及其关联的子对象。例如:
代码语言:csharp
复制
using (var session = sessionFactory.OpenSession())
{
    using (var transaction = session.BeginTransaction())
    {
        var parent = session.Get<Parent>(parentId);
        parent.Children.Add(new Child());
        session.SaveOrUpdate(parent);
        transaction.Commit();
    }
}
  1. 避免使用unsaved-value属性:在某些情况下,使用unsaved-value属性可能会导致子对象更新失败。如果你在映射文件中使用了此属性,请尝试删除它。
  2. 检查数据库约束:确保数据库中的外键约束和其他约束没有阻止子对象的更新。如果有问题,请更新数据库架构或者调整NHibernate的映射配置以适应这些约束。

如果以上方法都无法解决问题,请提供更多关于你的映射配置、实体类和更新操作的详细信息,以便我们能够更好地帮助你。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 线程更新UI的几种方法示例

本文介绍了Android 线程更新UI的几种方法示例,分享给大家,具体如下: 方式一:Handler和Message ① 实例化一个Handler并重写handlerMessage()方法 private...setText("点击安装"); break; case 2: button1.setText("打开"); break; } }; }; ② 线程获取或创建消息...} }); 方式三:线程调用View的post()方法 myView.post(new Runnable() { @Override public void run()...{ // 更新UI myView.setText(“更新UI”); }}); 方式四:线程调用View.PostDelayed(Runnabe,long) 对方式三对补充,long...参数用于制定多少时间后运行后台进程 方式五:Handler的post()方法 ① 创建一个Handler成员变量 private Handler handler = new Handler(); ② 线程调动

5.4K31

Python直接改变实例化对象列表属性的值 导致flask接口多次请求报错

的操作都会影响到此对象的list return cls.list if __name__ == '__main__': # 不影响到One对象的list值 a = One.get_copy_list...,知识点:一个请求 进入到进程后,会从进程 App中生成一个新的app(在线程的应用上下文,改变其值会改变进程App的相关值,也就是进程App的指针引用,包括g,),以及生成一个新的请求上下文(...并把此次请求需要的应用上下文和请求上下文通过dict格式传入到  栈(从而保证每个请求不会混乱)。并且在请求结束后,pop此次的相关上下文。...错误接口代码大致如下: class 响应如下(每次请求,都会向model类的列表属性值添加元素,这样会随着时间的增长导致内存消耗越来越大,最终导致服务崩溃): ?...总结:刚开始以为 一次请求过程,无论怎么操作都不会影响到其他请求的执行,当时只考虑了 请求上下文中不会出现这种问题,但是 应用上下文,是 进程App相关属性或常量的一个引用(相当于指针),任何对应用上下文中的改变

5K20

对象的继承关系在数据库的实现方式和PowerDesigner设计

面向对象的编程,使用对象的继承是一个非常普遍的做法,但是关系数据库管理系统RDBMS,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么RDBMS中表示呢?...不建立父对象,将父对象的所有属性转移到对象,为每个子对象建立对于的表。...一个宽表列出所有父对象对象的属性,同时用一个标识列表示该行数据存储的是哪个子类的数据。...对父对象和每个子对象建立一个对应的表,然后子表设置该子表的主键为与父表关联的外键。...PS:如果使用NHibernate进行编程,那么可以参考这篇文章,介绍了NHibernate对这三种继承的配置方法。 如果使用Entity Framework进行编程,那么可以参考这篇文章。

73510

C# 数据操作系列 - 11 NHibernate 配置和结构介绍

可以设置一个事务之间的进程级或集群级的二级缓存。 ISession - NHibernate.ISession: 一个单线程、短生命周期的对象,表示从应用程序和数据持久化之间一个连接。...提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core的导航属性。...它们可能只是一些普通的POCO,仅仅是与ISession关联起来了。只要ISession关闭了,这些对象就可以被分离出来然后可以应用层的任意地方使用。...实例状态 NHibernate,一个可持久化的对象有三种不同的状态,依据与持久化上下文之间的关系不同,其中ISession就是一个持久化上下文。...create表示每次只创建新增的;create-drop表示每次ISessionFactory创建时创建表 ,ISessionFactory关闭时,删除表;其中update表示每次都会将DDL SQL更新到数据库

1.2K20

NHibernate关于Inverse的理解和使用

使用NHibernate进行数据库操作的时候,比如数据插入的时候,经常用到级联功能,比如最常见的就是一个订单对应多个明细行,保存订单时只需要Save订单对象即可,订单下的所有明细行会级联保存。...【注意:这里是说最终结果,而不是中间结果,Insert OrderItem的时候,其OrderId为该对象对应的Order对象的Id,如果该Order对象未保存,则OrderId为null,如果是已保存的...以上都是插入过程,接下来还要进行外键更新操作,保证数据库的外键与对象Department设置的Users保持一致,所以Update每个User表即可。...所以一般建议Mapping时设置Inverse为True。对应的,Code也需要设置OrderItem对Order的引用。 Inverse更大的用处是ManyToMany的时候。...总结: Inverse用于设置双向关联时Nhibernate设置外键时依赖的对象,默认Inverse=False,一对多时表示依赖一端的集合,如果为True表示依赖多段对象对一端对象的引用。

44930

NHibernate学习笔记之一,Hello world!

NHibernate是一个面向.NET环境的对象/关系数据库映射框架,主要应用在数据持久层,和其它的ORM框架一样用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。...2、新建项目并添加引用,将NHibernate-3.3.0.GA-bin的“Iesi.Collections.dll”与“NHibernate”引用到项目中,如图2所示复制Configuration_Templates...文件夹的对应数据库配置文件,这里使用MSSQL,所以复制“MSSQL.cfg.xml”,并对NHibernate的配置信息适当修改 。...            finally             {                 session.Close();             }         }         //更新...UserDAL的方法。

58720

Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发

Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧,从...说个题外话,NuGet真心不错,至少已经做新项目的时候不用到处去整理lib包了,从NuGet进行下载、更新、卸载都很方便,而且还能自搭建自己公司的服务器,不过目前还是有些问题,有时候在下载最新包无法使用的情况下...NuGet下载FluentNhibernate后,会自动下载安装Nhibernate及Iesi。...刚我们的测试报错,是因为Employee的Name是个UserName类,Nhibernate的Component,我FN之旅四(上)中有介绍到,默认情况下映射根据字段映射到数据库的,所以上面的测试会报错...PS:今天本来心情不错,没想到有客人来拉横幅,一直公司吵闹,害的我无法集中精力,估计文章中会有错的地方,大家见谅了。

94660

NHibernate 缓存

一级缓存 一级缓存就是 ISession 缓存, ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession... NHibernate 的参考文档, 对 ISession 的描述如下: A single-threaded, short-lived object representing a conversation...一级缓存测试 一级缓存缓存无需配置, 默认支持, 因此, 使用 session 查询对象, 如果仅仅是根据 id 加载指定的对象, 需要使用 session 的 Get 或 Load 方法, 这样可以充分利用...也可以实体类的 hbm 映射文件配置使用二级缓存, 不过 hibernate.cfg.xml 文件中统一配置是推荐的做法。...从二级缓存读/写数据 Refresh:向二级缓存写数据,想不从二级缓存读数据,通过配置文件设置 cache.use_minimal_puts从数据库读取数据时,强制二级缓存刷新 CacheRegion

59011

NHibernate教程

一、NHibernate简介 今日的企业环境,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.Net环境的对象/关系数据库映射工具。...NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。例如学生和课程间的多对多关系就可以转化为学生类的一个课程集合的属性。...配置NHibernate (1)NHibernate的配置文件有两种:桌面应用程序(WinForm)为App.config,在网页应用程序(WebForm)为web.config。...使用NHibernate的API进行编程 数据库编程不外乎“添加”、“删除”、“更新”,看看NHibernate是如何实现这三种操作吧。...(1) 声明NHibernate的Factory private static Configuration mCfg=new Configuration(); private static

34610

Nhibernate_nhibernate与ef区别

NHibernate用于把你的.Net对象持久化到底层的关系数据库.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西...开发过程 HNibernate将会有一些工具帮助你,如:生成schema,根据映射文件(Mapping file)生成类,并更新schema(一个新开发者的建议).然而,本文档,前提是你已经手动的数据库的创建喝...这些嵌入的Generator标记告诉NH怎样生成Primary Key(NH很方便的就能给你生成一个,不管是什么类型的,只要你告诉它怎样去做).我们举的例子,把它设置成"assigned",意思是"...代码里面使用NHibernate是很简单的事情: 1. 创建一个Configuration对象. 2....Configuration对象知道所有.Net类和后端数据库之间的映射关系, Configuration cfg = new Configuration(); cfg.AddAssembly("NHibernate.Demo.QuickStart

57230

NHibernate 多对多映射的数据更新

NHibernate 多对多映射的数据更新 最近在用 NHibernate 做多对多更新时突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除再插入全部数据, 感觉非常奇怪..., 反过来思考觉得肯定是自己的问题, 经过一番搜索 (Google), 发现 StackOverflow 上也有人问类似的问题, 并且最终 NHibernate Tip: Use set for many-to-many...Understanding Collection performance 这样描述: Bags are the worst case....不只是多对多, 如果你的集合需要更新NHibernate 推荐的是: 19.5.2....sess.Flush(); 由此可见, bag 多对多映射更新时性能较差, 如果不需要更新,则可以放心使用, 需要更新时则 set 是更好的选择。

93910

LINQ开发的地位?

DLINQ *.dbml文件该属于哪一层,的确Linq to Sql存在问题,DLINQ,虽然可以语言层级定义查询逻辑。...但是依然没有将数据库持久化数据映射为领域对象,所以还是一种针对数据库的编程模型。 LINQ是微软将在C# 3.0将推出的语言集成查询技术,许多人也将LINQ叫做微软的ORM。...Linq之前.net领域最流行的框架就是Nhibernate。是不是LINQ之后Nhibernate就要消失呢?答案自然是否定的。...这里有个帖子Microsoft LINQ + NHibernate: 在那篇帖子,作者列举了三大原因: DLINQ,虽然可以语言层级定义查询逻辑。...Nhibernate已经提供了许多帮助进行领域面向对象建模的特征。而DLINQ目前还无法拥有。 而LINQ + NHibernate的好处则是: 类型安全的查询,并且能使用智能提示功能!

1.4K60

NHibernate 缓存

一级缓存 一级缓存就是 ISession 缓存, ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession... NHibernate 的参考文档, 对 ISession 的描述如下: A single-threaded, short-lived object representing a conversation...一级缓存测试 一级缓存缓存无需配置, 默认支持, 因此, 使用 session 查询对象, 如果仅仅是根据 id 加载指定的对象, 需要使用 session 的 Get 或 Load 方法, 这样可以充分利用...也可以实体类的 hbm 映射文件配置使用二级缓存, 不过 hibernate.cfg.xml 文件中统一配置是推荐的做法。...以上是项目中用到的二级缓存相关知识的整理, 肯定不完整, NHibernate 的缓存还有更多的地方需要挖掘。

43310

Nhibernate_juan benet

NHibernate用于把你的.Net对象持久化到底层的关系数据库.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西...开发过程 HNibernate将会有一些工具帮助你,如:生成schema,根据映射文件(Mapping file)生成类,并更新schema(一个新开发者的建议).然而,本文档,前提是你已经手动的数据库的创建喝...这些嵌入的Generator标记告诉NH怎样生成Primary Key(NH很方便的就能给你生成一个,不管是什么类型的,只要你告诉它怎样去做).我们举的例子,把它设置成”assigned”,意思是”...代码里面使用NHibernate是很简单的事情: 1. 创建一个Configuration对象. 2....Configuration对象知道所有.Net类和后端数据库之间的映射关系, Configuration cfg = new Configuration(); cfg.AddAssembly(“NHibernate.Demo.QuickStart

36450

Fluent NHibernate之旅(四)-- 关系(

接着上一篇,我们继续讲解ORM的关系。在数据库设计,我们最多打交道的,要算一对多关系了,延续我们的示例,我们来讲解一下一对多的关系。...映射 不得不赞叹一下 Fluent Nhibernate ,有了它,我们的映射一切都变得如此简单,先来看看Model吧,用户的订单列表,对于用户来说,暂时是不需要排序的,所以我们可以使用ISet作为Order...的列表。...我们Output,能看到NHibernate生成的Sql语句,测试也成功,说明我们刚刚是立即加载了Orders属性。...总结 总体来说,一对多的映射比较简单点,不过我们今天只是说了一般的情况,但如果我们遇到级联更新、级联删除等,就会遇到一些问题,在后续文章中会慢慢道来。

705100
领券