2011-03-31 3 views
0

Аналогичные вопросы были заданы, но я не нахожу ответа, поэтому здесь. У меня есть следующая Fluent отношения сопоставляются:Fluent NHibernate Cascade Ошибка удаления

HasMany<UserFilter>(x => x.UserProjectFilters) 
      .KeyColumns.Add("UserProfileID") 
      .Cascade.All() 
      .AsSet() 
      .Inverse() 
      .Cache.ReadWrite(); 

При попытке удалить родительскую (Filter объект), хотя, удаление не каскад; Я вижу исключение: «Операция DELETE противоречит ограничению REFERENCE ...». В NH Profiler я вижу, что для родителя создается инструкция «Удалить», но ни один из них не генерируется для дочернего элемента. Я ожидаю, что удаление для любых детей будет выполнено до родителя. Что я делаю не так?

Вот конец UserProfileFilter отношений:

References<Filter>(x => x.Filter) 
      .Column("FilterID") 
      .LazyLoad() 
      .Cascade.SaveUpdate(); 

Спасибо! Энди

+1

Try вынимая .Cascade.SaveUpdate() в отношении ребенка обратно в фильтр и посмотреть, что делает. Это может помочь вам решить ваши проблемы, если вы упростите свои отношения. Если вы посмотрите на SQL, он пытается сначала удалить родительский (Фильтр)? –

ответ

1

Это закончилось тем, что проблема с несколькими внешними ключами на столе ребенка, и неправильный ключ использовался в отображении , Я изменил приведенный выше код на следующий, и он работал просто отлично:

HasMany<UserFilter>(x => x.UserProjectFilters) 
      .KeyColumns.Add("FilterID") 
      .Cascade.All() 
      .AsSet() 
      .Inverse() 
      .Cache.ReadWrite(); 

Благодарим за помощь Дэвида!

Энди

1

Я думаю, что вам нужно Cascade.AllDeleteOrphan(), как вы установили отношения как Inverse()

+0

Спасибо за быстрый ответ, но, к сожалению, это не сработало. Я вижу исключение NH: «Исключение произошло при выполнении пакетных запросов», и, к сожалению, нет никакой иннерцепции. Это то же самое исключение, которое я видел, кроме как с AllDeleteOrphan, у него нет внутреннего исключения, указывающего на нарушение внешнего ключа. – Andy

+1

Кажется, странная настройка - у меня обычно нет обоих контуров каскадирования отношений M-to-1. Вы сами создали схему, или NHibernate сделал это? –

+0

Мы создали нашу схему вручную. Если я удалю Cascade.SaveOrUpdate при отображении дочерней коллекции, я все еще вижу ошибку: «Операция DELETE противоречила ограничению REFERENCE ...». Любые другие мысли? – Andy

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