Father father = BL.GetFatherById(1);
Product product = BL.GetByID(123);
(father.Products[553] == product)
product.delete = true;
father.Products[553].delete == false !!??
這是爲什麼?加載一個對象兩次並更改其中一個,另一個不會更改
不是他們連接?它是同一個對象。
Father father = BL.GetFatherById(1);
Product product = BL.GetByID(123);
(father.Products[553] == product)
product.delete = true;
father.Products[553].delete == false !!??
這是爲什麼?加載一個對象兩次並更改其中一個,另一個不會更改
不是他們連接?它是同一個對象。
正如你可以在section 10.3 of the NHibernate reference manual中看到的那樣,數據庫標識和CLR對象標識每個會話都是等效的。
因此將產生true
當且僅當foo
和bar
連接到相同的會話,並映射到同一個數據庫行。使用==
比較對象標識時要小心 - 操作符可能已經過載(但您通常應該知道這一點)。
因此,只要您保持在同一個會話中,無論您使用什麼對象查詢,都應該始終獲得相同的對象。你在使用多個會話嗎?也許是工作單元模式,並且您正在比較從不同工作單元返回的對象?
首先,讓我告訴你,你在做什麼是可怕的。什麼,這實際上意味着
father.Products[553] == product;
除非你已經編寫了一個自定義集合,我懷疑你這樣做是沒有辦法,將工作。
所以
到這裏看看如何做到這一點(不考慮實際問題)
你能提供的BL類這兩種方法的內容? – 2010-06-13 09:22:01
這似乎是一個問題,您的業務層(我假設BL代表業務層)是如何編寫的,但您尚未分享足夠的信息以提供比此更多的幫助。 +1給Yauheni的評論。 – 2010-06-13 10:20:39