有没有什么办法可以获得NHibernate作为运行查询结果放入ICriteria对象的对象类型?在这个代码示例中,如果它们不为null,则可以获取我的对象的类型,但如果它们是?另外,根据返回的数据,一个“行”(object [])可能在其他行不存在的地方有空字段 - 迫使我枚举所有行(最坏情况)以确定每列(对象的索引[]) 应该。NHibernate ICriteria和预期类型
在哪里可以找到对象的预期类型(我创建的数组中的每个对象的预期类型 - 显然它不会在我的数组上,但我希望它在某处ICriteria层次结构)?
DetachedCriteria dc = DetachedCriteria.For<MyObject>().Add(...).SetProjection(...);
IList<object[]> list = dc.GetExecutableCriteria(session).List().OfType<object[]>().ToList();
foreach(object [] o in list)
{
foreach(object p in o)
{
if(p != null)
Type t = p.GetType();
else
throw new ApplicationException("Query returned null for column");
}
}
我问这是因为不得不实际检查由NHibernate返回的结果似乎是错误的方式去做这件事。反射似乎也没有任何帮助,因为在检查返回的ICriteria对象(CriteriaImpl对象)时,我无法在任何地方找到对象类型的实例,而是在实际结果“row”/“column”中找到对象。
我问,因为我试图从一个NHibernate的结果动态创建一个DataTable,我希望有强类型的列。
为什么试图从NHibernate构建数据集?似乎毫无意义,如果你真的需要使用数据集ADO.NET – sirrocco 2009-07-04 10:02:31
如果我选择使用ADO.NET,那么我必须跟踪我宁愿让NHibernate处理的许多事情(方言,加入,标准,等等 - 我必须解析所有文本并自己重新组合 - 不是小任务)。 我的问题源于我的用户可能会将自定义列添加到数据库并查询它们,我希望能够从NHibernate获取列类型。 – Michael 2009-07-06 15:22:57