我在懶惰加載時遇到了一個問題。爲此,我使用LinQ到NHibernate,但我認爲它也適用於其他LINQ to XX方法。最佳做法:延遲加載或獲取所有屬性
設想一個用戶 TABEL用柱:
ID 名稱 地址 密碼(在這個例子中:平紋,不散列)
然後想象一個角色表:
ID 名稱
和cour se,有多對多表UserRole(附加信息如CreateDate)。
如果你只想得到名特定用戶的角色您可以通過渴望加載用下面的查詢實現這個目標的:
var roles = session.Query<User>().FetchMany(u => u.UserRoles)
.ThenFetch(ur => ur.Role)
.Single(u => u.Id == userId)
.UserRoles.Select(ug => new { ug.Role.Name });
Lazy- loading:
var roles = session.Query<User>().Single(u => u.Id == userId)
.UserRoles.Select(ug => new { ug.Role.Name });
該adva急切加載的竅門:每次只有1次調用時,不要對數據庫進行2次或3次調用 急切加載的缺點:即使您說您只希望返回名稱,查詢本身也會導致所有數據庫中所有包含的表的屬性(包括我們示例中的密碼等敏感信息),並且一旦進入代碼,它將僅過濾名稱。
任何人都可以提供一些建議,哪些是最佳做法?還是有沒有其他方式的急切加載而不加載所有的屬性。請不要使用存儲過程的建議。
由於提前,
彼得
我明白你的願景。但是安全呢?如果 - 例如銀行賬戶號碼 - 從客戶端發送到客戶端,而客戶端實際上不需要它,這會有多危險?數據庫和客戶端之間的數據傳輸是不安全的,還是它? – user825887 2012-03-28 17:43:23