[Ошибка]: не сохраняется для: System.Collections.Generic.List (только при сохранении коллекции) - PullRequest
1 голос
/ 18 мая 2011

Я получаю исключение при сохранении списка в 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 () существует .... хмммм.

1 Ответ

4 голосов
/ 18 мая 2011

Это потому, что вы не можете сохранить коллекцию подобных объектов. К счастью, поскольку эти объекты уже сохранены и загружены в кэш, вам на самом деле ничего не нужно делать, так как сеанс сохранит их при следующей очистке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...