我们知道如果我们自己定义的引用类型没有重写Equals方法,那么CLR将会自动调用Object的Equals方法去进行判等。而Object的Equals方法只是进行判断两个引用是否指向同一个对象,如果是,则返回true,否则返回false。但在NHibernate中下面的用法都会返回true。
//加载id为1的UserInfo
UserInfo userInfo = GetUserInfo(1);
//加载所有的UserInfo列表
IList lstUserInfo = GetAllUserList();
//用法1
if(lstUserInfo.Contains(userInfo)) {
return true;
}
//用法2
foreach(UserInfo user in lstUserInfo) {
if(user.Equals(userInfo)) {
return true;
}
}
但我在UserInfo类中并未重写Equals方法,难道是开始加载的userInfo与lstUserInfo中的userInfo指向的是同一个对象,NHibernate究竟是怎么处理的呢?还望有人不吝赐教。