C# 使用NHibernate将Treeview控件与数据库绑定时出错
下面是我的应用程序的代码解释和映射文件C# 使用NHibernate将Treeview控件与数据库绑定时出错,c#,nhibernate,exception,treeview,controls,C#,Nhibernate,Exception,Treeview,Controls,下面是我的应用程序的代码解释和映射文件 private void PopulateNodes(IList<Folder> Values, TreeNodeCollection nodes) { foreach (Folder r in Values) { TreeNode tn = new TreeNode(); tn.Text = r.folderNa
private void PopulateNodes(IList<Folder> Values, TreeNodeCollection nodes)
{
foreach (Folder r in Values)
{
TreeNode tn = new TreeNode();
tn.Text = r.folderName.ToString();
tn.Value = r.folderID.ToString();
nodes.Add(tn);
bool val = _documentManagerModule.GetNodeCount((int)r.folderID);
tn.PopulateOnDemand = val;
}
}
我的映射文件如下
private ISessionFactory m_SessionFactory = null;
public bool GetNodeCount(int parentfolderID)
{
ISession session = m_SessionFactory.OpenSession();
int count = (int)session.CreateQuery("select count(f.parentID) from Folder f where f.parentID = ?").SetParameter(0, parentfolderID.ToString()).UniqueResult();
try
{
if (count > 0)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
throw new Exception("Unable to get ChildFolders ", ex);
}
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace ="Cuyahoga.Modules.DocumentManager"
assembly ="Cuyahoga.Modules.DocumentManager">
<!-- Mappings for class 'Folder' -->
<class name="Folder" table="cm_folders" lazy="false">
<!-- Identity mapping -->
<id name="folderID">
<column name="folder_ID" />
<generator class="native" />
</id>
<!-- Simple mappings -->
<property name="folderName" column ="folder_name" />
<property name="parentID" column ="parent_ID" />
<!-- one-to-many mapping: Document-->
<bag name="Documents" table ="cm_documents" cascade="save-update" lazy="false">
<key column="folder_ID" />
<one-to-many class="Document" />
</bag>
<!--Reflexive associations-->
<many-to-one name="ParentFolder" class ="Folder" column ="parent_ID" cascade ="none"/>
<bag name="ChildFolder" table ="cm_folders" cascade="save-update" inverse ="true" lazy="false">
<key column="parent_ID" />
<one-to-many class="Folder" />
</bag>
</class>
</hibernate-mapping>
我得到的错误是
对象引用未设置为对象的实例
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例
源错误:
在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别
堆栈跟踪:
[NullReferenceException:对象引用未设置为对象的实例。]
Cuyahoga.Modules.DocumentManager.DocumentManagerModule.GetNodeCount32 parentfolderID+84
Cuyahoga.Modules.DocumentManager.Web.DocumentManager.PopulateNodeDesiList`1值,TreeNodeCollection节点+288
Cuyahoga.Modules.DocumentManager.Web.DocumentManager.PopulateRootLevel+94
Cuyahoga.Modules.DocumentManager.Web.DocumentManager.Page\u加载对象发送者,事件参数e+121
System.Web.Util.CalliHelper.EventArgFunctionCallerIntPtr fp、对象o、对象t、事件参数e+14
System.Web.Util.CallEventHandlerDelegateProxy.CallbackObject发送方,EventArgs e+35
System.Web.UI.Control.OnLoadEventArgs e+99
System.Web.UI.Control.LoadRecursive+50
System.Web.UI.Control.LoadRecursive+141
System.Web.UI.Control.LoadRecursive+141
System.Web.UI.Control.LoadRecursive+141
System.Web.UI.Control.LoadRecursive+141
System.Web.UI.Page.ProcessRequestMain布尔IncludeStages在区域同步点之前,布尔IncludeStages在区域同步点+627
请帮助我查找此程序中的错误。实际上,我正在尝试使用NHibernate将树视图控件与数据库绑定。作为实现的一部分,我正在尝试检查当前parentnode是否有一些子节点。如果它有子节点,则bool值设置为true,而PopulateOnDemand属性为此设置为true节点。从外观上看,m_SessionFactory似乎尚未在GetNodeCount方法中初始化。这就是我要开始寻找的地方
此外,还可以将整个if/else块替换为返回计数>0。尽管如此,如果方法名为GetNodeCount,它确实应该返回一个计数。m\u SessionFactory是在GetNodeCount方法之外初始化的。错误仍然是一样的。我在上面更新了它codenull未初始化。您将获得一个NullReferenceException,因为m_SessionFactory实际上为null。如果它实际上被设置为ISessionFactory的某个实例,那么它不会出现在发布的代码中。我建议您将函数重命名为HasNodes或从函数返回实际节点数。