NHibernate SqlException的值不能为空
本文关键字:不能 SqlException NHibernate | 更新日期: 2023-09-27 18:18:57
当我试图保存对象时,它抛出了ADOException "Could not save object"。SqlCommand为空。在它下面,内部进程捕获了另一个异常;"值不能为空"。我查了一下,它应该告诉哪个参数是空的,但在我的情况下,它没有。
这是整个异常消息
Exception:Thrown: "Value cannot be null." (System.ArgumentNullException)
一个系统。抛出ArgumentNullException: "值不能为空。"时间:19/6/2556 16:14:25线程:[6380]
我100%确定我要保存的对象不包含任何空变量。但是,有一个变量(alarm_id)从我输入的更改为空。我把变量设为非空值,结果它变成了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);
奇怪,可能不相关,但由于您的生成器是身份,为什么要将alarm_id字段设置为3?如果不赋值,则在保存对象后它将有一个值。