2012-09-05 80 views
0

我有幾個與更新問題functionaliy使用NHibernate更新查詢與NHibernate

  1. 我有客戶和地點實體1:N的關係。客戶擁有位置資產。在創建/更新客戶實體時,我剛剛分配了位置屬性和已提交的更改。

    new Location() { Id = ViewModel.LocationId }; 
    

    是不是正確的方法做,或做我需要檢索數據庫中的位置實體,並再次將其附加像下面

    newCust.Location = GetlocationfromDB(ViewModel.LocationId); 
    
  2. 它是如何與M編輯:N的關係。我有訂單和訂單實體。所以,如果一個新聞組添加/刪除,我需要檢查哪些組添加和從數據庫獲取和重視它,還是組識別符號會做得很好..

回答

1
  1. 這是不正確的辦法做到這一點 - 如果你有主鍵未保存的值映射的權利,但要做到這一點是使用session.Load(ViewModel.LocationId)的正確方法也許能行得通看到http://ayende.com/blog/3988/nhibernate-the-difference-between-get-load-and-querying-by-id

  2. 有一個處理這個問題的方法有多少,但是聽起來好像你希望你的關係被映射爲一個集合(以防止重複)而不是一個包。如果您將其映射爲一個集合並使用ISet作爲關係的屬性類型,則會爲您處理重複項。但是,如果您使用包包,則需要刪除自己代碼中的重複項。同樣,如果它是一個已經存在的組,那麼你應該使用session.Load來獲取組。

+0

感謝馬丁的回覆,它有幫助。在你的第一個答案中,「未保存價值的映射權」是什麼意思。 – Sunny

+0

在您的映射中,您可以爲主鍵指定未保存的值 - 然後NHibernate可以使用主鍵的值來確定它是新實例還是現有值 –