powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Nhibernate one-to-many. Cascade delete.
1 сообщений из 1, страница 1 из 1
Nhibernate one-to-many. Cascade delete.
    #36565571
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот два маппинга Doc<->DocItems
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Doc:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
	<class name="BusinessObjects.BO.Doc,BusinessObjects" table="DOC">
		<id name="Id" column="ID_DOC" type="Decimal" unsaved-value="0">
      <generator class="sequence">
        <param name="sequence">G_ID_DOC</param>
      </generator>
    </id>

    <version column="CHANGE_STAMP" type="Int32" name="ChangeStamp" unsaved-value="0" />
    <!--<version column="ORA_ROWSCN" type="Int64" name="ChangeStamp" generated="always" />-->

    <property column="NAME" type="String" name="Name" not-null="true" length="512" />
		<property column="DESCRIPTION" type="String" name="Description" length="1024" />

    <bag name="DocItems" table="DOC_ITEM" cascade="all" >
      <key column="ID_DOC" />
      <one-to-many class="BusinessObjects.BO.DocItem,BusinessObjects" not-found="ignore" />
    </bag>
   
  </class>
</hibernate-mapping>


DocItem:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
	<class name="BusinessObjects.BO.DocItem,BusinessObjects" table="DOC_ITEM">

		<id name="Id" column="ID_DOC_ITEM" type="Decimal" unsaved-value="0">
      <generator class="sequence">
        <param name="sequence">G_ID_DOC_ITEM</param>
      </generator>
		</id>
		
    <many-to-one name="Doc" column="ID_DOC" class="BusinessObjects.BO.Doc,BusinessObjects" not-null="true" />
    
    <property column="ID_PRODUCT" type="Decimal" name="ProductId" not-null="true" />
    <property column="NUM" type="Decimal" name="Num" not-null="true" />
		<property column="COST" type="Decimal" name="Cost" not-null="true" />

  </class>
</hibernate-mapping>


Почему-то, когда я удаляю в транзакции главную сущность, то удаляются и подчиненные - ЧТО Я И ОЖИДАЮ:

Код: plaintext
1.
2.
3.
4.
5.
6.
                using (var tx = _session.BeginTransaction())
                {
                    _session.Delete(doc);

                    tx.Commit();
                }

НО, когда я удаляю из коллекции Doc.Items несколько Item'ов, а потом делаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
                using (var tx = _session.BeginTransaction())
                {
                    _session.Update(obj);

                    tx.Commit();
                }


все что делает хибер - это посылает в БД запросы вида UPDATE doc_item SET id_doc = NULL WHERE id_doc_item = xxx;
т. е. о устанавливает поле которым подчиненная сущность ссылается на родительскую в NULL. А мне надо чтобы он эти записи удалял!
Что не так в моем маппинге. Подскажите пож.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Nhibernate one-to-many. Cascade delete.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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