Nhibernate: исключение произошло добытчиком - PullRequest
0 голосов
/ 12 декабря 2010

Вопрос: я продолжаю получать эту ошибку nhibernate, когда я пытаюсь вставить экземпляр clsSettings в базу данных:

Произошло исключение при получении nhDBapi.DB.Tables.clsSettings.UID

См. Класс ниже, все методы ниже класса не работают, из-за этого исключения.

Самое смешное, это работает, когда все находится в исполняемом файле с именем nhDBapi.exe, и даже когда он находится в dll, схема таблицы создается правильно.

Когда я перемещаю точноетот же код в API_nHibernate.dll загружается MailServer.exe, затем он перестает работать ...

Единственное различие между этими двумя в exe, я использую:

[NHibernate.Mapping.Attributes.Class(Name = "nhDBapi.DB.Tables.clsSettings, nhDBapi", Table = "T_lsSettings")]

в то время как вdll я использую:

[NHibernate.Mapping.Attributes.Class(Name = "nhDBapi.DB.Tables.clsSettings, API_nHibernate", Table = "T_lsSettings")]

, который должен быть правильным.

Здесь класс:

using System;
using System.Collections.Generic;
using System.Text;

namespace nhDBapi.DB.Tables
{

    [NHibernate.Mapping.Attributes.Class(Name = "nhDBapi.DB.Tables.clsSettings, API_nHibernate", Table = "T_lsSettings")]
    public class clsSettings
    {

        [NHibernate.Mapping.Attributes.Id(Name = "UID", Column = "S_UID", TypeType = typeof(System.Guid))]
        public virtual System.Guid UID
        {
            get { return m_UID; }
            set { m_UID = value; }
        } // UserID

        protected System.Guid m_UID;


        [NHibernate.Mapping.Attributes.Property(Name = "Settings", Column = "S_Settings", TypeType = typeof(System.Byte[]))]
        public virtual System.Byte[] Settings
        {
            get { return m_Settings; }
            set { m_Settings = value; }
        } // UserID


        protected System.Byte[] m_Settings;



    } // End partial class lsSettings


} // End Namespace nhDBapi.DB.Tables

И здесь все методы вставки, которые я пробовал:

// nhDBapi.DBaccess.Insert<nhDBapi.DB.Tables.clsDomains>(x);
public static void InsertRef<T>(ref T RowToAdd)
{
    /*
    List<T> lsRows = new List<T>();
    lsRows.Add(RowToAdd);

    Insert<T>(lsRows);
    lsRows.Clear();
    lsRows = null;
    */
    NHibernate.ISession session = m_bsfSessionFactory.OpenSession();
    NHibernate.ITransaction transaction = session.BeginTransaction();

    session.SaveOrUpdate(RowToAdd);


    transaction.Commit();
    session.Close();
    transaction.Dispose();
    session.Dispose();

} // End Sub Insert



// nhDBapi.DBaccess.Insert<nhDBapi.DB.Tables.clsDomains>(x);
public static void Insert<T>( T RowToAdd)
{
    /*
    List<T> lsRows = new List<T>();
    lsRows.Add(RowToAdd);

    Insert<T>(lsRows);
    lsRows.Clear();
    lsRows = null;
    */
    NHibernate.ISession session = m_bsfSessionFactory.OpenSession();
    NHibernate.ITransaction transaction = session.BeginTransaction();

    session.SaveOrUpdate(RowToAdd);


    transaction.Commit();
    session.Close();
    transaction.Dispose();
    session.Dispose();

} // End Sub Insert


// nhDBapi.DBaccess.Insert<nhDBapi.DB.Tables.clsDomains>(xx);
public static void Insert<T>(List<T> ListOfRowsToAdd)
{
    NHibernate.ISession session = m_bsfSessionFactory.OpenSession();
    NHibernate.ITransaction transaction = session.BeginTransaction();

    // Tell NHibernate that this object should be saved
    // commit all of the changes to the DB and close the ISession
    try
    {

        for (int i = 0; i < ListOfRowsToAdd.Count; ++i )
        {
            session.SaveOrUpdate(ListOfRowsToAdd[i]);
        }

        /*
        foreach (T tThisRow in ListOfRowsToAdd)
        {
            // session.Save(tThisRow);
            session.SaveOrUpdate(tThisRow);
        } // Next tThisRow
        */

        transaction.Commit();
        session.Close();
        transaction.Dispose();
        session.Dispose();
    } // End try
    catch (Exception ex)
    {
        MsgBox(ex.Message, "Error");
        //Console.WriteLine(ex.InnerException.Message);
        System.Environment.Exit(1);
    } // End catch

} // End Sub Insert

1 Ответ

1 голос
/ 13 декабря 2010

IIRC Свойство Name NHibernate.Mapping.Attributes.Class - это не имя типа, а имя NHibernate entity .Он не должен содержать имя сборки.На самом деле вам даже не нужно определять свойство Name, NHibernate определит его для вас.Это только в том случае, если вы хотите переопределить его.

Так что , если эта проблема действительно вызвана этим, удалите свойство Name и оно должно работать.Если нет, то есть другая разница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...