Отображение NHibernate: вставка дочерних элементов после того, как родитель имеет идентификатор из триггера INSERT без ОБНОВЛЕНИЯ дочернего ParentId

Позвольте мне сначала объяснить нашу ситуацию.

Мы работаем над коричневым полевым приложением. Существует заданная структура базы данных, которую мы не можем изменить, как в этом примере:

Таблица1 [ID] [Поле1] [Поле2] [Поле3]...

Table2 [ID] [Table1_ID] [FieldA] [FieldB] [FieldC]...

Table1_ID - это внешний ключ для Table1. Это означает, что Таблица1 может иметь несколько дочерних элементов из Таблицы2.

Ни одно из полей и ключей не может быть нулевым. Каждая таблица имеет предварительный триггер INSERT, устанавливающий идентификатор из ее последовательности таблиц.

У нас есть следующие классы в нашем приложении.

Класс для базы данных Table1:

public class Parent
{
   public virtual long? Id { get; set; }
   public virtual string Field1 { get; set; }
   public virtual string Field2 { get; set; }
   public virtual string Field3 { get; set; }

   public virtual List<Child> Children { get; set; } // Holds the children of Table2
}

Класс для базы данных Table2:

public class Child
{
   public virtual long? Id { get; set; }
   public virtual long? ParentId { get; set; }
   public virtual string FieldA { get; set; }
   public virtual string FieldB { get; set; }
   public virtual string FieldC { get; set; }
}

Нам нужно сериализовать эту древовидную структуру (это просто самая простая версия) по сети. Для сериализации мы используем ServiceStack.Text в ServiceStack.

Из-за того, что обратная ссылка из Таблицы 2 в Таблицу 1 как объект вызовет ошибку циклической ссылки при сериализации (Таблица 1 -> Таблица 2 -> Таблица 1 -> Таблица 2 ... и т. Д.), Мы привязаны к этой структуре.

Клиент / сервер создает новую структуру без установки какого-либо Id или ParentId. Значения ключа NULL. Мы хотим, чтобы NHibernate сделал это для нас.

Есть ли способ создать работающее отображение Fluent-NHibernate, которое сначала вставляет таблицу Table1, используя новый Id из триггера INSERT базы данных, применяя этот Id к своим дочерним ParentIds и вставляя дочерние элементы (из таблицы 2)?

Важно не вставлять дочерние элементы без ParentId и обновлять ParentId на втором шаге.

0 ответов

Другие вопросы по тегам