Пакетное обновление вернуло неожиданное количество строк от обновления; фактическое количество строк: 0; ожидается: 1 - PullRequest
17 голосов
/ 02 декабря 2011

Мне сложно определить исключение NH:

Пакетное обновление вернуло неожиданное количество строк от обновления; фактическая строка количество: 0; ожидается: 1

Мой код Dal:

 public T Save(T item)
        {
            using (ISession session = NHibernateHelper.GetSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.SaveOrUpdate(item);

                    transaction.Commit();

                    return item;
                }
            }
        }

Мой файл log4net:

команда 0: ОБНОВИТЬ Metadata_FriendDetails SET UserId = @ p0, Email = @ p1, Имя = @ p2 ГДЕ FriendId = @ p3; @ p0 = a358ab9d-d481-4bdd-8cb2-18ddc8898c70 [Тип: Guid (0)], @ p1 = '1@hotmail.com' [Тип: строка (4000)], @ p2 = 'myFriend' [Тип: строка (4000)], @ p3 = 2ea35658-edb1-43e3-b848-e1915d1042df [Тип: Guid (0)]

2011-12-02 13: 06: 49,750 [Агент: поток запуска адаптера для теста 'SaveFriendDetails_Test' с идентификатором '17016e48-1ff4-4dea-8536-6aa3b24e5fb7'] DEBUG NHibernate.AdoNet.AbstractBatcher - закрытый IDbCommand, открытый IDbCommands: 0 2011-12-02 13: 06: 49,751 [Агент: поток запуска адаптера для проверить 'SaveFriendDetails_Test' с идентификатором '17016e48-1ff4-4dea-8536-6aa3b24e5fb7'] ОШИБКА NHibernate.Event.Default.AbstractFlushingEventListener - не удалось синхронизировать состояние базы данных с сеансом NHibernate.StaleStateException: пакетное обновление вернуло неожиданную строку считать из обновления; фактическое количество строк: 0; ожидается: 1

Кто-нибудь видит проблему?

1020 * ТИА *

Ответы [ 2 ]

32 голосов
/ 03 декабря 2011

проблема заключалась в том, что при сохранении я не должен указывать значение идентификатора, а при обновлении я должен указать его.

3 голосов
/ 08 августа 2012

Перед сохранением необходимо установить для объекта Id null.

пример:

obj.setId(null);
objectDao.save(obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...