isessionfactory fluently nhibernate fluent-nhibernate automapping

fluently - nhibernate fluent mapping



Cómo resolver “La actualización por lotes devolvió un recuento inesperado de filas desde la actualización; recuento real de filas: 0; esperado: 1 ”problema? (4)

Cuando se dirige a una vista con un disparador INSTEAD OF puede ser casi imposible obtener el recuento de filas correcto. Después de profundizar un poco en la fuente, descubrí que se puede hacer un seguimiento personalizado que hace que NHibernate ignore los controles de conteo.

public class SingleTableNoResultCheckEntityPersister : SingleTableEntityPersister { public SingleTableNoResultCheckEntityPersister(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping mapping) : base(persistentClass, cache, factory, mapping) { for (int i = 0; i < this.insertResultCheckStyles.Length; i++) { this.insertResultCheckStyles[i] = ExecuteUpdateResultCheckStyle.None; } for (int i = 0; i < this.updateResultCheckStyles.Length; i++) { this.updateResultCheckStyles[i] = ExecuteUpdateResultCheckStyle.None; } for (int i = 0; i < this.deleteResultCheckStyles.Length; i++) { this.deleteResultCheckStyles[i] = ExecuteUpdateResultCheckStyle.None; } } }

Obteniendo esto cada vez que intento CREAR una entidad particular ... solo quiero saber cómo debo ir para averiguar la causa.

Estoy usando Fluent NHibernate automapping así que quizás no haya establecido una convención de manera adecuada y / o necesito anular algunas cosas en uno o más archivos de mapeo. He revisado una serie de publicaciones en la web relacionadas con este problema y me resulta difícil averiguar exactamente por qué está sucediendo en mi caso.

El objeto que estoy guardando es bastante simple. Es un objeto de "Persona" que hace referencia a una entidad de "Compañía" y tiene una colección de entidades de "Dirección". Las ACTUALIZACIONES funcionan bien en los objetos Person existentes que ya están en la base de datos.

Sugerencias?

Gracias -wg


El error significa que la instrucción SQL INSERT se está ejecutando, pero el ROWCOUNT que devuelve SQL Server después de ejecutarse es 0, no 1 como se esperaba.

Hay varias causas, desde asignaciones incorrectas, hasta los desencadenadores UPDATE / INSERT que tienen el recuento de filas desactivado.

Tu mejor momento es perfilar las sentencias de SQL y ver qué sucede. Para hacerlo, active el registro de nHibernate sql o use el perfil de sql . Una vez que tenga el SQL, puede conocer la causa, si no, intente ejecutar el SQL manualmente y vea qué sucede.

También le sugiero que publique su asignación, ya que ayudará a las personas a detectar cualquier problema.


Esto puede ocurrir debido a la clave principal de incremento automático. Para resolver este problema, no inserte el valor de incremento automático con el conjunto de datos. Insertar datos sin la clave principal.


Esto puede suceder cuando los activadores ejecutan consultas adicionales de DML (modificación de datos) que afectan los recuentos de filas. Mi solución fue agregar lo siguiente en la parte superior de mi activador:

SET NOCOUNT ON;