1. 程式人生 > >NHibernate composite-id class must override Equals() 解決辦法

NHibernate composite-id class must override Equals() 解決辦法

概述:

  當使用NHibernate查詢表中的資料時,如果表中存在複合主鍵,如果沒有在相應的實體類中重寫Equals(),那麼將會出現"Could not compile the mapping document: 
TestCleanSnow.JkptGlxtUser.hbm.xml".當跟蹤出錯的內部資訊的時候會發現,內部異常為"composite-id class must override Equals(): TestCleanSnow.JkptGlxtUserId"

解決辦法:

    在JkptGlxtUserId.cs這個實體類中重寫Equals()方法如下:


  1. public override bool Equals(object obj)
  2.         {
  3.             return base.Equals(obj);
  4.         }
複製程式碼

再次執行呼叫語句,發現還出現"Could not compile the mapping document: TestCleanSnow.JkptGlxtUser.hbm.xml".這個錯誤,但是跟蹤內部異常為:InnerException = {"composite-id class must override GetHashCode(): TestCleanSnow.JkptGlxtUserId"}
到此很明顯,在遇到複合主鍵的情況下,應該還得在JkptGlxtUserId.cs中重寫GetHashCode(),程式碼如下:


  1. public override int GetHashCode()
  2.         {
  3.             return base.GetHashCode();
  4.         }
複製程式碼

再次執行呼叫程式,OK了.