2009-02-25 2 views
1

Привет, У меня возникла проблема с обновлением дочерних объектов в следующем сценарии.Проблема с каскадом NHibenate

отображений следующим образом:

Родитель: Календарь

<bag name="defaultCategories" inverse="true" lazy="false" 
    cascade="all-delete-orphan"> 
    <key column="parentID" /> 
    <one-to-many class="DefaultCategory"/> 
    </bag> 

ребенка: DefaultCatergory

<class name="DefaultCategory" table="tb_calendar_default_category" lazy="false"> 

<id name="id" column="id"> 
    <generator class="hilo"/> 
</id> 

<many-to-one name="calendar" column="parentID" not-null="true" 
cascade="all-delete-orphan" /> 

Код используется для обновления календаря:

public Calendar Update(Calendar vo) 
    { 
     session = NHibernateHelper.GetCurrentSession(); 

     tx = session.BeginTransaction(); 
     using (tx) 
     { 

      session.Update(vo); 

      tx.Commit(); 
     } 

     return vo; 
    } 

к веро lem заключается в том, что когда я добавляю или удаляю defaultCategories через ui и отправляю обновленную версию календаря на задний план, NHibernate возвращает обновленный календарь, и все кажется хорошо. Однако любые defaultCatergories, которые должны были быть удалены, остаются в таблице категорий по умолчанию. Таким образом, когда я обновляю ui и снова вызываю календарь, я вижу, что коллекция не изменилась.

Как вы думаете, мне нужно удалить все defaultCatergories по parentID и затем воссоздать? У меня было впечатление, что NHibernate позаботился об этом для вас? Любая помощь или указатели очень ценится.

ответ

1

Неужели NHibernate не распознает Календарь как существующий экземпляр. Взгляните на документацию this section и посмотрите, помогает ли добавление атрибута несохраненного значения в ваше сопоставление.

+0

Благодарим за это. Я просто посмотрел на него и последовал совету использования saveUpdate. Однако, все та же проблема. Это, скажем, у меня есть 3 дочерних объекта, удалить 2 и обновить. Я по-прежнему получаю 3 в дБ. Вернитесь к чертежной доске. – user17510

1

Является ли ваш по умолчанию flushmode OnCommit? Если это не так, тогда может быть очистка сеанса до совершения, устранит проблему.

Что вы делаете, должно работать.

Смежные вопросы