2009-08-09 2 views
2

NHibernate позволяет мне запрашивать базу данных и получать IList объектов взамен. Предположим, я получаю список из нескольких десятков объектов и изменяю полдюжины или около того. У NHibernate есть способ сохранить изменения в коллекции, или мне нужно сохранять каждый объект, когда я его меняю?Сохранять коллекцию верхнего уровня?

Вот пример. Предположим, что я запустил следующий код:

var hql = "from Project"; 
var query = session.CreateQuery(hql); 
var myProjectList = query.List<Project>(); 

Я верну IList, который содержит все проекты. Теперь предположим, что я выполнить следующий код:

var myNewProject = new Project("My New Project"); 
myProjectList .Add(myNewProject); 

И давайте говорить, что я сделать это несколько раз, добавив несколько новых проектов в список. Теперь я готов сохранить изменения в коллекции.

Я хотел бы сохранить изменения, просто передав myProjectList текущему ISession для обновления. Но ISession.SaveOrUpdate(), похоже, принимает только отдельные объекты, а не коллекции, такие как myProjectList. Есть ли способ, которым я могу сохранить изменения в myProjectList, или мне нужно сохранять каждый новый объект по мере его создания? Спасибо за вашу помощь.

Дэвид Veeneman
Foresight Systems

ответ

1

При загрузке объектов, как в вашем примере - то да, вы должны сохраняться их один за другим.

Однако, если вы сделаете небольшое изменение дизайна и загрузите что-то вроде: Учетная запись, которая имеет IList<Project> - если вы укажете каскад «what_cascade_you_need» в сопоставлении, то при изменении проектов на учетной записи вам остается только сохранить Учет и все будет сохранено.

Смежные вопросы