2011-07-01 50 views
8

如果我從不同的地方查詢「邏輯上」(在數據庫中)相同的對象,實體框架是否返回相同的對象引用?實體框架對象引用是否等於相同的數據庫對象

例如,我問客戶與名喬黑色,(並假設現在我知道,在數據庫中只有一個喬黑色) Customer c = select ... blabla where ... Name == Joe Black...;,並在代碼別的地方,我問Customer c2 = select... where.. ID==5其中5是Joe Black的ID。我知道在數據庫中它們映射到相同的對象,但是它們是否也映射到代碼級別的相同對象?那麼c1是否等於c2?我有列表來合併和檢查對象的邏輯相等(我現在無法訪問數據庫),我想知道實體框架對象是否可以很好地使用它,或者我應該編寫自定義比較器類。

回答

13

大多數ORM包括Entity Framework和NHibernate都使用Identity Map Pattern來確保每個主鍵只有一個給定實體的單個實例。身份圖的範圍由上下文決定,因此兩個不同的上下文將創建兩個引用同一個實體的對象。讓實體實現IEquatable是一個很好的做法,包括爲等號運算符重寫,以便'=='或'!='可以工作。這比人們想象的更多。以一個例子來看看here

+0

通過問題回答,謝謝。所以這意味着我的工作更容易,但我不知道如何爲實體框架 - 自動生成的類添加實現方法或重載運算符。無論如何,再次訪問我的數據庫,它的工作。所以EF也會處理這個問題。 –

相關問題