2010-08-31 4 views
1

У меня есть три отображения следующим образом:NHibernate каскад и обратный

public MainChapterMap() 
{ 
    // other properties 

    HasMany(x => x.ClientSpecific).KeyColumn("MainChapterId"); 
} 

public MainChapterClientMap() 
{ 
    // other properties 

    References(x => x.MainChapter).Column("MainChapterId"); 
    HasMany(x => x.Details).KeyColumn("MainChapterClientId"); 
} 

public MainChapterClientDetailMap() 
{ 
    // other properties 

    References(x => x.MainChapterClient).Column("MainChapterClientId"); 
} 

MainChapter имеет много клиентов конкретных глав. Клиентский конкретные главы (MainChapterClient) имеют много переводов (MainChapterClientDetail)

Правило DELE должно быть следующим:

  1. При удалении MainChapter
    • Удалить MainChapterClient строку
    • Исключить MainChapterClientDetail ряд строк
  2. Когда dele тин MainChapterClient
    • НЕ удалить MainChapter строку
    • Удалить MainChapterClientDetail строку (ы)
  3. При удалении MainChapterClientDetail
    • НЕ удалить MainChapter строку
    • ли НЕ удалить MainChapterClientDetail ряд (-ы)

Но независимо от того, что я в конечном итоге получить эту ошибку:

deleted object would be re-saved by cascade (remove deleted object from associations)[Entities.MainChapterClient#39]

я не уверен, как настроить свои каскады больше. Любая помощь более чем приветствуется!

ответ

1

Вы должны удалить ссылку с обеих сторон:

MainChapterClient.Details.Remove(instance); 
instance.MainChapterClient = null; 
+0

Благодаря это тоже помогло мне. –

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