visual tutorial studio net mvc framework asp c# nhibernate

c# - tutorial - nhibernate vs entity framework



El objeto eliminado de NHibernate se volvería a guardar por cascada (1)

En mi solución tengo una rama de objetos comerciales con asociaciones. Entonces, cuando intento guardar un objeto raíz después del procesamiento, recibo una excepción con el mensaje "El objeto eliminado se volvería a guardar por cascada". Lo que significa que después de eliminar un objeto, todavía existe en colecciones, otras asociaciones, etc. ¿Alguien sabe cómo obtener una lista de referencias al objeto eliminado? Es muy difícil encontrar referencias sin soporte de depurador.


El escenario más común (mi experiencia) es tener dos objetos raíz que tengan colecciones de algún objeto de emparejamiento / medio.

public class Employee { public virtual IList<Occupation> Occupations { get; set; } } public class Company { public virtual IList<Occupation> Occupations { get; set; } }

Ahora, tenemos la Occupation como esta

public class Occupation { public virtual Employee Employee { get; set; } public virtual Company Company { get; set; } }

Entonces, ¿qué podría pasar?

  1. eliminamos una Ocupación del employee.Occupations . Colección de ocupaciones .
  2. Durante esa transacción, unidad de trabajo, también cargamos y por lo tanto cargamos la Company
  3. La compañía se inicia. Su colección de Ocupaciones se carga. Entonces, la referencia a la Ocupación eliminada se guarda allí
  4. NHibernate dice: el Deleted object would be re-saved by cascade

Solución (es):

  • asegúrese de que la compañía nunca se cargue (se mantenga como proxy)
  • o Remove() la ocupación también de la empresa company.Occupations Ocupaciones
  • no use mapeo como este en el lado de la Compañía:

( no use la cascada)

<bag name="Occupations" lazy="true" inverse="true" batch-size="25" cascade="all-delete-orphan"> // this above setting on Company side is making issues... <key column="Company_ID" /> <one-to-many class="Occupation" /> </bag>