2012-06-28 23 views
5

Tengo una empresa de entidad que tiene muchos pedidos. Me asignan éstos como siguiendo el uno al otro:NHibernate con fluidez Inserciones de asignación HasMany NULL Clave externa

Compañía

HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse(); 

Solicitar

References(x => x.Company).Column("CompanyID") 

Sin embargo, cuando creo un nuevo orden para la empresa y tratar de guardarlo, me sale un error de SQL : "No se puede insertar el valor NULL en la columna 'CompanyID', la tabla 'Pedidos'; la columna no permite valores nulos. INSERT falla".

(esto es la declaración generada SQL: INSERT INTO Orden (Nombre, CompanyID) VALORES (,); seleccione SCOPE_IDENTITY()]]?)

¿Qué es un error lógico, porque de hecho me puse CompanyID estar no anulable

Sin embargo, con la inversa Iide CompanyID se llena con la identificación adecuada, pero por mi vida, no puedo hacer que funcione. Traté de eliminar el inverso (el comportamiento no cambió en absoluto), cambié la cascada, establecí la referencia para que no sea nulable.

Incluso hice la columna nulable en la tabla para humor NHibernate. Pero eso me dejó con una Orden huérfana ya que hizo crear el registro de Orden pero dejó el CompanyID NULL.

Ésta es mi testcode donde hice el nuevo orden:

Company test = RepositoryBase<Company>.GetById(1); 
test.Orders.Add(new Order("test")); 
RepositoryBase<Company>.SaveWithTransaction(test); 

de actualizaciones por el camino se fue todo muy bien.

De todos modos, espero que alguien aquí vea lo que hice mal en mi mapeo.

Gracias de antemano.

Respuesta

4

se le olvidó preparar la compañía en el orden

test.Orders.Add(new Order("test") { Company = test }); 

inversa sólo se dice que el orden NH utiliza la referencia a la empresa en el objeto para insertar el Id.

2

¡Agregar esto primero!

test.Orders.Add(new Order("test"){Company = test}); 
+1

.. w. h. y ? .. – Tushar

+0

@Tushar ¡No lo sé! No recuerdo –

+0

O_O. Es por eso que deberías explicar el código en respuesta. :) – Tushar

Cuestiones relacionadas