我在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()存在......嗯。
答案 0 :(得分:4)
那是因为你无法保存这样的实体集合。幸运的是,由于这些实体已经被持久化并加载到缓存中,因此您实际上不需要执行任何操作,因为Session会在下次刷新时保存它们。