powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сохранение связанного объекта после exception: not-null property references to null
2 сообщений из 2, страница 1 из 1
Сохранение связанного объекта после exception: not-null property references to null
    #35821148
b0ltun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть два класса A и B, вот их упрощенный код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class A {
 public virtual long Id { get; set;}
 public virtual B LinkToB { get; set; }
}

class B {
 public virtual long Id { get; set; }
 public virtual A LinkToA { get; set;}
 public virtual string NameB {get ;set;}
}

Вот их NHibernate маппинги:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<hibernate-mapping>
  <class name="A" table="a">
    <id name="Id" column="id" type="long" unsaved-value="-1">
      <generator class="sequence">
        <param name="sequence">a_id_seq</param>
      </generator>
    </id>
    <one-to-one name="LinkToB" class="B" property-ref="LinkToA" cascade="all" constrained="false" />
  </class>
</hibernate-mapping>

<hibernate-mapping>
  <class name="B" table="b">
    <id name="Id" column="id" type="long" unsaved-value="-1">
      <generator class="sequence">
        <param name="sequence">b_id_seq</param>
      </generator>
    </id>
    <many-to-one name="LinkToA" class="A" column="a_id" unique="true" not-null="true" />
    <property name="NameB" type="string">
      <column name="name" not-null="true" />
    </property>
  </class>
</hibernate-mapping>

Связка A с B идет через уникальный внешний ключ.
приложение WinForms
Столкнулся с такой проблемой, если в форме я не задаю значние NameB
то при попытке сохранения объекта A возникает exception: not-null property references to null or transient object . Чего в принципе и следовало ожидать, тк NameB not-null="true" .

Далее я правлю NameB - задаю не null значение и повторно выполняю попытку сохранить. В результате опять возникает исключение NHibernate мол должно быть обработано строк 1, а обработалось 0

Вот код сохранения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public void SaveObj()
{
 try
 {
  session.BeginTransaction();
  session.Save(a);
  session.Flush();
  session.Commit();
 } catch (Exception ex)
 {
  session.Rollback();
  return false;
 }
 return true;
}

Разбирался выяснил, что при первом SaveObj() Хиебрнейт ничего в базу записать реально не успевает, тк при выполении session.Save() возникает исключение (из за NameB), а только получается значения из последовательностей a_id_seq и b_id_seq . Кода NameB задается и второй раз вызываю SaveObj() хибернейт делает INSERT A и затем UPDATE B . Хотя реально B не инсертился еще. Толи это глюк, то ли я что то не понимаю. Похоже что NH считает что B является уже персистентным и следовательно делает update вместо insert.

Вопрос в том как можно заставить его все же делать insert B в такой ситуации?
Понятно дело сразу можно сделать тупо, не давать сохранять если not-null поля не заполнены.
Но все же хотелось бы разобратся с проблемой.
...
Рейтинг: 0 / 0
Сохранение связанного объекта после exception: not-null property references to null
    #35822773
тихая гавань
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вполне работоспособный мап
a aa = new a();
b bb = new b();
bb.name = "asdasd";
aa.LinkToB = bb;
bb.LinkToA = aa;
ses.Save(aa);
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сохранение связанного объекта после exception: not-null property references to null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]