NHibernate SqlException“值不能为null”

时间:2013-06-19 09:34:07

标签: c# nhibernate

当我尝试保存对象时,它抛出了ADOException“无法保存对象”。结果SqlCommand为null。在它之下,内部流程捕获了另一个异常;“值不能为空”。我查了一下,它应该告诉哪个参数是null,但在我的情况下它不会。

这是完整的异常消息

Exception:Thrown: "Value cannot be null." (System.ArgumentNullException)

抛出了System.ArgumentNullException:“值不能为null。” 时间:19/6/2556 16:14:25 螺纹:[6380]

我100%确定我正在尝试保存的对象不包含任何空变量。虽然,有一个变量(alarm_id)从我输入的变为null。我将变量设为非空值,而是转为0。

任何人都知道什么是错的?

这是方法

public bool Save<T>(SessionAction sessionAction, T item)
{
    bool success = true;
    if ((sessionAction == SessionAction.Begin) || (sessionAction == SessionAction.BeginAndEnd))
    {
        _isRollback = false;
        Session = _sessionFactory.OpenSession();
        _transaction = Session.BeginTransaction();
    }

    try
    {
        if (item == null)
        {
            success = false;
        }
        else
        {
            Session.Save(item);

            //Session.Flush();
            //Session.Evict(item);
            if ((sessionAction == SessionAction.End) || (sessionAction == SessionAction.BeginAndEnd))
            {
                _transaction.Commit();
            }
        }
    }
    catch (ADOException e)
    {
        NHibernate.SqlCommand.SqlString s = e.SqlString;
    }
    catch (Exception ex)
    {
        errMsg = ex.Message;
        success = false;
        try
        {
            _isRollback = true;
            _transaction.Rollback();
        }
        catch { }
    }

    if ((sessionAction == SessionAction.End) || (sessionAction == SessionAction.BeginAndEnd))
    {
        if (Session != null) Session.Close();
        Session = null;
        _transaction = null;
        _connection = null;
    }

    return success;
}

对象的hbm

<hibernate-mapping assembly="ServicesLib" xmlns="urn:nhibernate-mapping-2.2"><class name="ServicesLib.Entities.alarm_raw_data, ServicesLib" table="alarm_raw_data" lazy="true" >
<id name="alarm_id" column="alarm_id">
  <generator class="identity" />
</id>
<!--property name="alarm_timestamp" column="alarm_timestamp"/-->
<property name="dcs_source" column="dcs_source" />
<property name="event_type" column="event_type" />
<property name="parameter" column="parameter" />
<property name="tag_desc" column="tag_desc" />
<property name="tag_name" column="tag_name" not-null="true"/>

 

这是我发送的输入。

data.tag_name = inf.content[0];

data.alarm_id = 3;
data.dcs_source = 44;
data.event_type = 56;
data.parameter = 5555;
data.tag_desc = 'd';

connector.Save(SessionAction.BeginAndEnd, data);

1 个答案:

答案 0 :(得分:0)

很奇怪,可能不相关,但由于您的生成器是标识符,为什么要将alarm_id字段设置为3?保持未分配状态,保存对象后将显示一个值。