Json.NET и NHibernate - десериализация постоянного объекта - PullRequest
2 голосов
/ 29 декабря 2010

Я отправляю коллекцию JSON из Javascript через веб-сервис REST для десериализации с использованием Json.NET и последующего обновления в БД с помощью NHibernate (я использую Fluent).Параметры, которые я использую для десериализации Json.NET:

        JsonConvert.DeserializeObject<T>(jsonString,
        new JsonSerializerSettings { 
            PreserveReferencesHandling = PreserveReferencesHandling.Objects
        });

Мой объект Json:

{
  "ID": 1,
  "Name": "ObjectName",
  "Keys": [
    {
      "ID": 6,
      "Name": "ID"
    }
  ]
}

Изменение свойств объекта и даже добавление и изменение дочерних объектов(Ключи), а затем десериализация прекрасно работает.Тем не менее, я не могу понять, как управлять удалением дочерних объектов.Например, если я удаляю дочерний объект (используя Object.Keys.splice), а затем обновляю, запись БД, к которой он относится, остается постоянной, даже если обновленный родительский объект не содержит их.также установили 'AllDeleteOrphan' в файле отображения.

    // one-to-many
    HasMany(x => x.Keys)
      .Inverse()
      .Cascade.AllDeleteOrphan();

Есть ли способ гарантировать, что дочерние объекты, удаленные через JavaScript, будут каскадно удалены при десериализации и обновлении объекта?Я также читал, что при использовании NHibernate, дочерние объекты должны быть удалены вручную из родительской коллекции, через Keys.Remove(item), перед обновлением.Было бы гораздо предпочтительнее (не говоря уже о масштабируемости) просто десериализовать и обновить.Есть шанс?

1 Ответ

2 голосов
/ 30 декабря 2010

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

Inverse = true (которая свободно использует nhibernate .Inverse ()является обязательным), как сказать «я не управляю этими отношениями».Из-за этой привязки родительский объект не удаляет / не обновляет коллекцию, потому что дети управляют отношениями.

Независимо от того, имеет ли это смысл или нет, я не могу сказать без полного понимания вашего домена.

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