2010-01-19 138 views
3

我正在使用NHibernate將一些對象加載到我的ASP.NET MVC應用程序中。NHibernate - Lazy-Loading原始類型

例如,提交由用戶提交的,我想顯示的用戶名(但只有用戶名)的用戶的,這樣的:

<%= Html.Encode(item.User.UserName) %> 

當我加載使用NHibernate提交,用戶是從數據庫延遲加載的,這意味着實際的SQL查詢(加載用戶信息)只會在我調用上述代碼行時生成和執行(這正是我想要的)。

問題是SQL查詢還會選擇有關用戶的其他信息,如密碼,電子郵件等。這些信息顯然不是必需的,並且會被丟棄。

SQL查詢看起來是這樣的:

SELECT id, username, password, email FROM User WHERE Id = 1; 

我的結論是NHibernate的只有懶加載引用映射到表在我的數據庫的其他對象。它似乎沒有延遲加載基本的原始類型,如字符串,整數等。

我可以這樣做嗎?當選擇上面一行代碼時,我希望SQL查詢看起來像這樣:

SELECT username FROM User WHERE Id = 1; 

這可能嗎?怎麼樣?

回答

1

是否有你不想加載完整對象的原因?除少數情況外,沒有真正的性能差異。

我可以理解,不想將密碼加載到內存中,但它應該被加密,並且可能不應該在您的域模型中。在你的情況下,我會做的是將User的子類分爲兩類,User和UserProfile(包含密碼等),以便在管理用戶帳戶時僅使用UserProfile對象。