[错误]:没有持久性:System.Collections.Generic.List(仅在保存集合时)

时间:2011-05-18 16:12:04

标签: nhibernate

我在nHibernate中保存List时遇到异常,但保存单个实体可以正常工作。

以下是一些示例代码:

var dataSources = session.CreateQuery("from DataSource").List<DataSource>();
session.Save(dataSources[0]);   //<--- This line works
session.Save(dataSources);      //<--- This line does not 

我得到的错误是:

  

没有持久性:   System.Collections.Generic.List`1 [MyCo.MyApp.Domain.EntityClasses.DataSource,   MyCo.MyApp.Domain.Model,   版本= 1.0.0.0,文化=中立,   公钥=空]]

正如您所看到的,它可以持久保存单个实体,但这些实体的集合会失败。

注意:fwiw,我的* .hbm.xml 构建为嵌入式资源。

解决方案

ISession.Save()只能保存单个实体,而不是集合,就像它一样。但是,当调用Flush()时,所有写操作都会发生。有趣的是,似乎一个人甚至根本不需要调用Save():

var dataSources = session.CreateQuery("from DataSource").List<DataSource>();
DataSource zDataSource = dataSources[0];
zDataSource.Description = "hello world" + System.DateTime.Now.ToString();
DataSource zDataSource2 = session.Get<DataSource>(222);
zDataSource2.Description = "hello world" + System.DateTime.Now.ToString();
session.Flush();

在上面的示例中,两个已修改的DataSource对象都将持久保存到数据库中。那么为什么Save()存在......嗯。

1 个答案:

答案 0 :(得分:4)

那是因为你无法保存这样的实体集合。幸运的是,由于这些实体已经被持久化并加载到缓存中,因此您实际上不需要执行任何操作,因为Session会在下次刷新时保存它们。