2010-01-19 81 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对象。