Aquí podría ser tu PUBLICIDAD


¿Puede nHibernate Generar valor para la propiedad?

votos
2

Las columnas Id pueden especificar un generador. Perfecto.

Sin embargo, tengo una situación en la que necesito asignar un valor generado a una columna de propiedad si es nulo. Piense en algo parecido a una tabla de facturas donde hay una columna de clave primaria sustituta y una columna de Número de factura.

CREATE TABLE dbo.Invoice (InvoiceId INT NOT NULL PRIMARY KEY IDENTITY(1,1), InvoiceNumber INT NOT NULL, InvoiceDate DATETIME NOT NULL, remaining columns...)

Este no es un valor predeterminado. El Número de Factura podría tener ciertas reglas alrededor de su generación. Tengo una clase de C # que maneja la generación actual, solo necesito encontrar una manera de poblar el valor de la propiedad en la clase de Factura.

Idealmente, podría especificar un generador para una propiedad como lo hago para un Id en la asignación. Desafortunadamente, eso no parece posible por lo que puedo determinar. Espero estar equivocado.

Tengo otras opciones, no nHibernate que podría emplear, como usar un disparador, insertando la generación en el proveedor. Sin embargo, me gustaría mantenerlo como una opción de configuración en lugar de una opción de codificación.

¿Alguien sabe si existe tal habilidad?

Publicado el 12/03/2009 a las 17:11
fuente por usuario Cory
En otros idiomas...        العربية       

3 respuestas

votos
2

NHibernate espera que usted defina todas estas reglas en sus clases de dominio, por ejemplo, en los constructores.

Respondida el 12/03/2009 a las 05:15
fuente por usuario yfeldblum


Aquí podría ser tu PUBLICIDAD


votos
0

Perdón por la respuesta tardía, pero recientemente me encontré con el mismo problema que tú. Retrocedí un poco en la fuente NHibernate y parece que encontré una solución.

Puede usar el espacio de nombre NHibernate.Id para la generación de Guid. Hay 2 opciones viables: permitir que su cliente genere el Guid o dejar que el DB nativo lo haga.

Estas son las clases que necesitas:

  • NHibernate.Id.NativeGuidGenerator // Generación DB
  • NHibernate.Id.GuidGenerator // Generación de clientes

El uso de NHibernate.Id.NativeGuidGenerator-class se puede lograr de la siguiente manera:

public Guid GetNewSessionId()
{
    NHibernate.Id.NativeGuidGenerator guidGen = new NHibernate.Id.NativeGuidGenerator();
    return (Guid)(guidGen.Generate((NHibernate.Engine.ISessionImplementor)anOpenSession, null));
}

Suerte con ello :)

Respondida el 07/04/2009 a las 03:53
fuente por usuario cwap

votos
0

¿Quiere decir que quiere proporcionar un valor predeterminado?

Diría que esto debería ser algo que deberías especificar en el nivel DB ...

Si realmente quieres que NHibernate se encargue de esto, creo que deberías crear un Interceptor que establezca el valor de esa propiedad cuando sea nula en el momento del enjuague.

O bien, puede especificar el valor predeterminado en su entidad, otorgando a la propiedad un valor predeterminado en el constructor.

Respondida el 12/03/2009 a las 05:13
fuente por usuario Frederik Gheysels