Как заставить NHibernate 3.1 обнаруживать изменения коллекции после Session.Merge, но до сброса - PullRequest
1 голос
/ 13 декабря 2011

Допустим, у меня есть следующая модель:

class Post
{
  ICollection<Comment> Comments { get; set; }
}

class Comment
{
  Post Post { get; set;}
}

У меня есть существующий post, к которому я добавляю новый comment.По той или иной причине (слишком долго, чтобы вдаваться в подробности), я звоню Session.Merge(post) в этот момент, но я еще не совершил.Затем я очищаю post.Comments, потому что какой-то другой код решает, что он не нужен, и добавляю еще один Comment.Затем я снова вызываю Session.Merge(post).

Поведение, которое я вижу, состоит в том, что в базу данных передаются два INSERT, потому что были добавлены два комментария (даже если я очистил промежуточную коллекцию).Экземпляр объекта не отражает это, хотя;после слияния post.Comments.Count равно 1. Если я вызываю Session.Clear () и перезагружаю сообщение по id, я вижу два комментария, которые действительно отражают то, что произошло в базе данных.

Проблема в том, чтоне отражает то, что я хочу.Мне нужен только один комментарий (в этом примере).

Я считаю, что это происходит потому, что после слияния с сеансом я очищаю коллекцию Comments, затем изменяю ее перед повторным объединением, а затемсовершение сделки.Таким образом, ActionQueue сеанса уже содержит вставку для первого комментария. Я ожидал, что это действие будет удалено из очереди, когда я очистил коллекцию, но это не так.

Чтобы подтвердить это, я попытался выдать Session.Delete(eachComment) перед тем, как вызватьpost.Comments.Clear(), который оставил мне ожидаемый суммарный 1 комментарий, но все еще выдал INSERT, после которого сразу же УДАЛЕНО в базу данных.

Могу ли я получить сеанс NHibernate, чтобы обнаружить, что коллекция была очищена и заменена до ее фиксации?

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