Ошибка при связывании Treeview Control с базой данных с использованием NHibernate

Вот объяснение кода и сопоставление файлов моего приложения.

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>

Я получаю сообщение об ошибке

В экземпляре объекта не задана ссылка на объект.

Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.NullReferenceException: ссылка на объект не указывает на экземпляр объекта.

Ошибка источника: во время выполнения текущего веб-запроса было создано необработанное исключение. Информацию о происхождении и расположении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка стека: [NullReferenceException: ссылка на объект не указывает на экземпляр объекта.] Cuyahoga.Modules.DocumentManager.DocumentManagerModule.GetNodeCount (Int32 parentfolderID) +84 Cuyahoga.Modules.DocumentManager.Web.DocumentManager.PopulateNodes (значения IList`1, узлов TreeNodeCollection) +288 Cuyahoga.Modules.DocumentManager.Web.DocumentManager.PopulateRootLevel() +94 Cuyahoga.Modules.DocumentManager.Web.DocumentManager.Page_Load(отправитель объекта, EventArgs e) +121 System.Web.Util.CalliHelper.EventArgFunctionCaller( IntPtr fp, Object o, Object t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Отправитель объекта, EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs 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(B логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) +627

Пожалуйста, помогите мне найти ошибку в этой программе. На самом деле я пытался связать управление древовидным представлением с базой данных с помощью NHibernate. В рамках реализации я пытался проверить, есть ли у текущего родительского узла какие-либо дочерние элементы или нет. имеет дочерние элементы, для логического значения установлено значение true, а для свойства PopulateOnDemand установлено значение true для этого узла.


person subha    schedule 31.12.2009    source источник
comment
GetNodeCount, возвращающее логическое значение, довольно обманчиво. Я бы посоветовал вам переименовать функцию во что-то вроде HasNodes или вернуть фактическое количество узлов из функции.   -  person Nathan Fisher    schedule 31.12.2009


Ответы (1)


Судя по всему, m_SessionFactory не был инициализирован в методе GetNodeCount. Вот я бы и начал искать.

Кроме того, вы можете заменить весь блок if/else на return (count > 0). Хотя, если метод называется GetNodeCount, он действительно должен возвращать счетчик.

person Aaronaught    schedule 31.12.2009
comment
m_SessionFactory был инициализирован вне метода GetNodeCount. Тем не менее ошибка та же. Я обновил его в приведенном выше коде - person subha; 31.12.2009
comment
null не инициализирован. Вы получаете NullReferenceException, потому что m_SessionFactory на самом деле null. Если на самом деле он где-то установлен как экземпляр ISessionFactory, он не отображается в опубликованном коде. - person Aaronaught; 31.12.2009