2011-03-31 114 views
0

類似的問題已被問到,但我沒有找到答案,所以在這裏。我有以下流利的關係映射:流利NHibernate級聯刪除錯誤

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

當我嘗試刪除父(過濾器實體)雖然,刪除不級聯;我看到這個異常:「DELETE語句與REFERENCE約束衝突......」。在NH Profiler中,我看到正在爲父級生成Delete語句,但沒有爲該子級生成。我希望在父母之前執行任何孩子的刪除操作。我究竟做錯了什麼?

這裏的關係UserProfileFilter結束:

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

謝謝! 安迪

+1

嘗試取出孩子的引用中的.Cascade.SaveUpdate()回到過濾器,看看有什麼。如果你簡化你的關係,它可以幫助你解決你的問題。如果你看SQL,它是否試圖首先刪除父(Filter)? – 2011-03-31 17:36:07

回答

1

這結束了與子表上的多個外鍵的問題,而按錯鍵的映射正在使用。我將上面的代碼更改爲以下代碼,它工作得很好:

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

謝謝大衛的幫助!

Andy

1

我認爲你需要Cascade.AllDeleteOrphan()因爲你已經建立了關係,Inverse()

+0

感謝您的快速回復,但不幸的是這並沒有奏效。我看到一個NH異常:「執行批量查詢時發生異常」,不幸的是沒有內部錯誤。除了AllDeleteOrphan之外,這是我看到的異常,它沒有指示外鍵違例的InnerException。 – Andy 2011-03-31 15:20:42

+1

這似乎是一個奇怪的設置 - 我通常不會有M-1關係級聯的兩端。你自己創建了模式,還是讓NHibernate完成了它? – 2011-03-31 15:22:46

+0

我們手動創建了我們的模式。如果我刪除了子集合映​​射上的Cascade.SaveOrUpdate,我仍然看到錯誤:「DELETE語句與REFERENCE約束衝突...」。任何其他想法? – Andy 2011-03-31 17:34:42