NHibernate:删除实体时SqlDateTime溢出
我试图删除一个对象,但收到一个SqlTypeException:SqlDateTime溢出 所以,今天我激活了“Show SQL” 配置中的属性, 令我惊讶的是,我发现当我尝试删除这个实体时 事实上是这样的 更新开关导致错误,因为我的DataTime属性 无效值。 问题是为什么NHibernate要在之前更新实体 删除操作? 这是我的密码:NHibernate:删除实体时SqlDateTime溢出,nhibernate,sqldatetime,Nhibernate,Sqldatetime,我试图删除一个对象,但收到一个SqlTypeException:SqlDateTime溢出 所以,今天我激活了“Show SQL” 配置中的属性, 令我惊讶的是,我发现当我尝试删除这个实体时 事实上是这样的 更新开关导致错误,因为我的DataTime属性 无效值。 问题是为什么NHibernate要在之前更新实体 删除操作? 这是我的密码: using (ITransaction tnx = presentationSession.BeginTransaction()) {
using (ITransaction tnx = presentationSession.BeginTransaction()) {
try {
presentationSession.Delete(View.SelectedData);
/* View.SelectedData has the reference I want to delete. Entity Id: 4601 */
tnx.Commit();
} catch {
tnx.Rollback();
throw;
}
}
这是我的映射:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
lazy="false">
<class
name="PTFS.Personal.Model.Empleado, PTFS.Personal"
table="Supervisores"
>
<id
name="Id"
unsaved-value="0"
access="field.camelcase"
>
<generator class="native" />
</id>
<property name="Nombre" />
<property name="Supervisor" />
<property name="Cedula" />
<property name="Cargo" />
<property name="Localidad" />
<property name="Traslado" column="DES_TRASLADO" />
<property name="Cambio" column="DES_CAMBIO" />
<property name="FechaTraslado" column="F_TRASLADO" />
<property name="FechaCambio" column="F_CAMBIO" />
<property name="Ingreso" column="F_INGRESO" />
<property name="Egreso" column="F_EGRESO" />
<property name="Sueldo" column="SUELDO_BRUTO" />
</class>
</hibernate-mapping>
它首先更新两个不同的实体。。。而这些都不是
我要删除的那个,我提供要删除的实体的Id
is:4601
请,在此方面的任何帮助都将不胜感激 NHibernate正在更新这些实体,因为您正在使用的会话在某个时候加载了它们。当它加载它们时,它们被存储在一级缓存中。随后,对其进行了修改。然后,当您提交事务时,NHibernate将刷新会话,从而检查其缓存中的任何实体是否“脏”(即需要更新),并更新这些实体中的任何一个
因此,请检查您是否在会话生命周期的某个时刻加载了这些实体。在我尝试删除其中一个实体之前,这些实体已加载了相同的ISession。但我肯定我没有修改任何内容。无论如何,我将尝试检查代码以确保我没有更新实体。@jhenriquez,您可能没有显式修改它们,但如果某些值在数据库中可以为null,但在您的模型中不能为null(就像Ingreo看起来那样),NHibernate会认为该值已被修改。非常感谢!你给我指明了正确的方向。考虑到我目前的情况,我决定使用一个不同的会话来删除实体,所以它不需要刷新任何更改。
NHibernate: UPDATE Supervisores SET Nombre = @p0, Supervisor = @p1,
Cedula = @p2, Cargo = @p3, Localidad = @p4, DES_TRASLADO = @p5,
DES_CAMBIO = @p6, F_TRASLADO = @p7, F_CAMBIO = @p8, F_INGRESO = @p9,
F_EGRESO = @p10, SUELDO_BRUTO = @p11 WHERE Id = @p12;@p0 = NULL, @p1 =
NULL, @p2 = NULL, @p3 = NULL, @p4 = NULL, @p5 = NULL, @p6 = NULL, @p7
= NULL, @p8 = NULL, @p9 = 05/09/2005 12:00:00 a.m., @p10 = NULL, @p11
= 0, @p12 = 3547
NHibernate: UPDATE Supervisores SET Nombre = @p0, Supervisor = @p1,
Cedula = @p2, Cargo = @p3, Localidad = @p4, DES_TRASLADO = @p5,
DES_CAMBIO = @p6, F_TRASLADO = @p7, F_CAMBIO = @p8, F_INGRESO = @p9,
F_EGRESO = @p10, SUELDO_BRUTO = @p11 WHERE Id = @p12;@p0 = NULL, @p1 =
NULL, @p2 = NULL, @p3 = NULL, @p4 = NULL, @p5 = NULL, @p6 = NULL, @p7
= NULL, @p8 = NULL, @p9 = 01/01/0001 12:00:00 a.m., @p10 = NULL, @p11
= 0, @p12 = 4628