Я получаю исключение при сохранении списка в nHibernate, но сохранение отдельной сущности работает нормально.
Вот пример кода:
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, Культура = нейтральная,
PublicKeyToken = NULL]]
Итак, как вы можете видеть, он может сохранять индивидуальность, но набор этих сущностей не работает.
Примечание: 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();
В приведенном выше примере оба измененных объекта источника данных будут сохранены в базе данных. Так почему же Save () существует .... хмммм.