visual studio net framework example nhibernate fluent-nhibernate

net - nhibernate visual studio 2015



InserciĆ³n de padres e hijos con NHibernate al mismo tiempo (1)

NHibernate no es magia. Es solo un ORM, si sus hijos no tienen su conjunto de referencia para el padre, ¿por qué supondría que debido a que el padre tiene una lista de hijos que la referencia de los niños, a su vez, DEBERÍA ser una referencia para el padre?

Creo que respondió su propia pregunta cuando afirmó que las entidades Child no tienen su propiedad Parent (lo que significa que es nula, lo que significa que NHibernate intentará guardar un valor ''nulo'' para la Identificación principal en su tabla Child )

Si tuviera que usar estos objetos SIN NHibernate, tendría sentido que la referencia principal deba establecerse en las entidades secundarias cuando se agreguen.

EDITAR: Esto es para el caso donde ha especificado ''Inverso'' en su mapeo. Si quitaras esta llamada a ''Inverso'' , debería funcionar de la manera que quisieras que funcione como Inverso indica que el otro extremo (la entidad hija) es responsable de mantener un registro de la relación. Esto significa que necesita establecer manualmente la referencia del padre en el hijo.

Sin embargo, al eliminar la declaración Inversa , se guardarían los Hijos, se guardará el padre, y luego se actualizará el ID padre de los Hijos. Como tiene una restricción nula en el ID principal, esto significa que todavía no funcionará, ya que inicialmente insertaría el elemento secundario con un id principal de nulo.

Las dos soluciones serían eliminar esta restricción o simplemente agregar un método al padre llamado AddChild:

public void AddChild(Child childObj) { childObj.Parent = this; Children.Add(childObj); }

Agregue otro método llamado RemoveChild:

public void RemoveChild(Child childObj) { if (Children.Contains(childObj)) { Child.Parent = null; Children.Remove(childObj); } }

Luego, simplemente use esos métodos para agregar / eliminar niños.

Estoy intentando guardar (insertar) una entidad principal con una lista de entidades secundarias. Ambas entidades usan un Guid como claves principales. Las claves no admiten nulos y no hay una relación clave establecida en el archivo db.

El guardado no funciona, se lanza una excepción que dice que estoy intentando guardar un nulo en la clave externa principal en la tabla secundaria.

Esperaba que nhibernate creara una clave para el padre y dejara que sus objetos secundarios lo supieran. ¿Es esto una limitación de NHibernate o de utilizar Guids como claves principales?

Esta respuesta sugiere que tienes que configurar el padre de manera manual, ¿es esta la única manera?

Aquí están mis mapeos para referencia:

Mapeo de padres:

HasMany(x => x.Children).KeyColumn("ParentKey").Inverse().Cascade.All();

Mapeo de niños:

References(x => x.Parent).Not.Nullable().Column("ParentKey");