NHibernate + JSON / Ajax Родитель / Дети Отношения? Почему это не работает? - PullRequest
3 голосов
/ 29 сентября 2008

У меня типичные родитель / ребенок отношения. Написание новостей в .NET и добавление детей работает нормально, NHibernate играет хорошо и добавляет правильные отношения.

Однако при передаче JSON object от клиента в какой-либо метод, который сериализует мой JSON в представление .NET, NHibernate, похоже, запутывается. Он предлагает правильный запрос для добавления родителя (и назначает новый идентификатор для Id), однако он не связывает этот родительский идентификатор с дочерними объектами в `SQL, который он пытается выполнить. Я пришел к быстрому и грязному хаку, который я перечислю ниже - Но мне было интересно, что-то мне здесь не хватает?

IList<BackerEntry> backersTemp = new List<BackerEntry>();
foreach (BackerEntry backerEntry in jsonBackerEntity.BackerEntries)
{
  backersTemp.Add(backerEntry);
}

jsonBackerEntity.BackerEntries.Clear();

foreach (BackerEntry backerEntry in backersTemp)
{
  jsonBackerEntity.AddChild(backerEntry);
}

Выполнение этого - единственный способ заставить NHibernate увидеть, что эти дети действительно принадлежат этому родителю. Внутри мой метод AddChild выглядит так:

public virtual void AddChild(BackerEntry backerEntry)
{
  if (backerEntry.Backer != null)
  {
    backerEntry.Backer.BackerEntries.Remove(backerEntry);
  }
  backerEntry.Backer = this;
  this.BackerEntries.Add(backerEntry);
}

РЕДАКТИРОВАТЬ: Я думаю, что, возможно, только что понял, почему - Возможно, потому что я не отправляю обратно свойство Parent ребенка в JSON. Я даже не уверен, возможно ли это из-за круговой природы обоих. У ребенка есть родитель (у которого в json есть ребенок, который является первоначальным ребенком, у которого есть родитель и т. Д.) ... Есть идеи?

1 Ответ

1 голос
/ 14 ноября 2013

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

Кроме того, вы можете попробовать более гибкий метод слияния.

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