Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Nhibernate one-to-many. Cascade delete. / 1 сообщений из 1, страница 1 из 1
07.04.2010, 12:49
    #36565579
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nhibernate one-to-many. Cascade delete.
Вот два маппинга 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
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Nhibernate one-to-many. Cascade delete. / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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