我创建了一个nunit测试来隔离需要很长时间的方法。但首先快速概述我的域模型可能是个好主意:
这就是我所说的PmqccForm有一个问题对象
这是模型的问题部分:
关键是我想能够打字
由于每个PmqccForm始终只有一个JobVelocity问题,因此所有其他问题都是一样的。这些是问题对象上的C#属性,它只是它们的保留位置。
现在,给我带来问题的方法是:
public IEnumerable<PmqccForm> GetPmqccFormsByUser(StaffMember staffMember)
{
ISession session = NHibernateSessionManager.Instance.GetSession();
ICriteria criteria = session.CreateCriteria(typeof(PmqccForm));
criteria.CreateAlias("Project", "Project");
criteria.Add(Expression.Eq("Project.ProjectLeader", staffMember));
criteria.Add(Expression.Eq("Project.IsArchived", false));
return criteria.List<PmqccForm>();
}
从刚刚运行此方法的Nunit测试中查看我的控制台,可以发现有近2000个sql查询正在被处理!
http://rodhowarth.com/otherstorage/queries.txt
是控制台日志。
问题是,在这个阶段,我只需要表单对象,实际问题可以在需要知道的基础上访问。我以为NHibernate能做到这一点?
这是我的映射文件:
http://rodhowarth.com/otherstorage/hibernatemapping.txt
有人能告诉我我错过了什么吗?还是一种优化我与NHibernate的关系的方法?
如果我将问题设置为一个集合,然后让属性在该集合中循环并返回正确的集合,该怎么办。从nhibernates的角度来看,这是更好的优化吗?