2011-02-19 17 views
10

Estoy usando Fluent NHibernate para mi persistencia de datos en una aplicación web.Fluido NHibernate genera AND AND Assigned ID Columns

Mi problema ... Tengo una clase base que se asigna a todas las entidades con una propiedad ID de tipo T (casi siempre un int o GUID) usando generatedBy(). Identidad()

El inicio de la aplicación , Tengo un cargador de arranque que verifica y verifica que los datos de semilla necesarios estén llenos. Mi problema es que algunos de los datos iniciales que se rellenan necesitan una ID específica. (IDS que corresponderían a una enumeración o usuario del sistema)

¿Hay alguna manera de forzar NHibernate para confirmar el registro utilizando el ID que I especifico, en lugar de un auto-generado uno? Cualquier otro compromiso con el repositorio a partir de ese momento se puede generar automáticamente.

Respuesta

26
Id(x => x.Id).GeneratedBy.Assigned(); 

Si desea que la aplicación asigne identificadores (a diferencia de que NHibernate los genere), puede usar el generador asignado. Este generador especial usará el valor del identificador ya asignado a la propiedad del identificador del objeto. Tenga mucho cuidado al usar esta función para asignar claves con significado comercial (casi siempre una decisión de diseño terrible).

Debido a su naturaleza inherente, las entidades que utilizan este generador no se pueden guardar mediante el método de la ISession SaveOrUpdate(). En su lugar, debe especificar explícitamente NHibernate si el objeto se debe guardar o actualizar llamando al método Save() o Update() del ISession.

http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-id-assigned

1

puede utilizar

Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1 
Cuestiones relacionadas