NHibernate; Обновление Id-свойства сущностей в отдельной коллекции при сохранении в базе данных - PullRequest
0 голосов
/ 02 февраля 2011

Я использую сеанс на звонок для сохранить отдельную коллекцию с возможными добавляет / обновляет (включая некоторые временные объекты) Но как обновить идентификаторы новых экземпляров (переходный процесс), который был равен 0, но теперь (после сохранения в базе данных) должен иметь значение?

Я имею в виду; Обновите эти идентификаторы переданной коллекции после правильного обновления базы данных.

Вы бы сделали это в хранилище? Если так, то как? ... а если нет, то как еще?

Как насчет того, чтобы рассматривать каскадные дочерние коллекции , которые также могут иметь новые экземпляры, тогда это становится немного сложнее. Буду признателен за некоторые мысли / советы по этому вопросу.

   class StoreRepository
   {
        public static void SaveOrUpdate(List<Store> stores)
        {
            using (ISession session = FNH_Manager.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    foreach (var s in stores)
                    { 
                        session.Get(typeof(Store), s.Id);
                        session.SaveOrUpdateCopy(s);
                    } 

                    transaction.Commit();
                }
            }
        }

Ответы [ 2 ]

0 голосов
/ 06 февраля 2011

Идентификаторы неустановленных экземпляров переходных процессов, по-видимому, связаны с использованием SaveOrUpdateCopy .Как я прокомментировал здесь. NHibernate: Как обновляется идентификатор удостоверения при сохранении временного экземпляра?

0 голосов
/ 02 февраля 2011

Если вы уверены, что постоянный объект не был изменен, вы можете повторно присоединить его к новому сеансу с помощью метода Lock и внести изменения. Новые объекты с Id = 0 просто SaveOrUpdate.

class StoreRepository
{
    public static void SaveOrUpdate(List<Store> stores)
    {
        using (ISession session = FNH_Manager.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                if(s.Id == 0)
                { 
                    session.SaveOrUpdate(s);
                } 

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