Вы явно не сопоставили отношения обратного родителя. Поэтому единственный способ, которым NHibernate знает, как сохранить значение столбца SubmittedBatch_id, - это сохранить объект parent . Он не может сохранить оба объекта одновременно, поэтому он сохраняет дочерний элемент, а затем, когда сохраняет родительский объект, сохраняет отношения.
На самом деле, даже если бы вам нужно было отобразить оба направления отношений, вам все равно пришлось бы указывать, кто является «хозяином», помечая другое как «обратное» отношение. Затем поле обновляется путем сохранения главной стороны.
Итак, если вы хотите отобразить свойство SubmittedBatch
в классе SubmittedBatchParameter
, сопоставьте его как «master» (т. Е. Установите отображение коллекции как обратное, используя .Inverse в Fluent), а затем установите его, когда Вы добавляете параметр в пакет, а затем видите только ожидаемую вставку.
Вот что я имею в виду:
public class SubmittedBatch
{
public virtual Guid Id { get; set; }
public virtual IList<SubmittedBatchParameter> Parameters { get; private set; }
}
public class SubmittedBatchParameter
{
public virtual SubmittedBatch SubmittedBatch { get; set; }
public virtual string Value { get; set; }
}
Тогда в дочернем отображении:
HasMany<SubmittedBatchParameter>(sb => sb.Parameters).Inverse();
и в родительском отображении:
References(sbp => sbp.SubmittedBatch);