NHibernate: переполнение SqlDateTime при удалении сущности - PullRequest
0 голосов
/ 16 мая 2011

Я пытаюсь удалить объект и получаю исключение SqlTypeException: SqlDateTime.

Итак, сегодня я активировал «Показать SQL» свойство в конфигурации, и к моему удивлению я обнаружил, что когда я пытаюсь удалить эту сущность NHibernate на самом деле обновление ведьмы приводит к ошибке, потому что мое свойство DataTime имеет неверное значение. Вопрос в том, почему NHibernate пытается обновить сущность раньше? операция удаления? Вот мой код:

  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>

И это вывод, который я получаю, когда фиксирую изменения, описанные выше. код:

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

Сначала обновляются две разные сущности ... и ни одна из них не обновляется. тот, который я хочу удалить, идентификатор объекта, который я предоставляю для удаления это: 4601 Пожалуйста, любая помощь с этим будет принята с благодарностью.

1 Ответ

1 голос
/ 16 мая 2011

NHibernate обновляет эти объекты, потому что сеанс, который вы используете, загрузил их в какой-то момент.Когда он загружал их, они сохранялись в кеше 1-го уровня.Затем впоследствии они были изменены.Когда вы затем фиксируете свою транзакцию, NHibernate сбрасывает сеанс, тем самым проверяя, являются ли какие-либо объекты в его кэше «грязными» (то есть необходимо обновить), и обновляет любой из этих объектов.загрузка этих сущностей в определенный момент в течение жизненного цикла вашей сессии.

...