2010-06-03 31 views
6

Tengo una tabla de Usuarios donde el campo "ID" es un campo GUID.Configuración manual del ID

Uso de ASPNET Estoy creando una cuenta de usuario y recuperando el GUID. Intento crear registros asociados en mis tablas con ese GUID como ID principal.

El problema con el que me estoy encontrando es que cuando configuro User.ID NHibernate intenta hacer una actualización, no un inserto. Veo esto con NHibernate Profiler antes de que explote con "Recuento de filas inesperado: 0; Esperado: 1".

Mi UsersMap para los usuarios de la tabla se ve así:

public class UsersMap : ClassMap<Users> 
{ 
    public UsersMap() 
    { 
     Id(x => x.ID, "ID"); //GUID 

     Map(x => x.Name, "Name"); //string 
     Map(x => x.PhoneNumber, "PhoneNumber"); //string 
     Map(x => x.FaxNumber, "FaxNumber"); //string 
     Map(x => x.EmailAddress, "EmailAddress"); //string 

     HasMany<UsersAddressBook>(x => x.usersAddressBook).KeyColumn("ID"); 
    } 
} 

¿Alguna idea? Gracias por adelantado.

Respuesta

16

Debe especificar que su identificación será asignada.

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

Esto le permitirá especificar el valor, sin que NHibernate intente realizar una actualización.

+0

Esto parece ser el mejor método También funciona perfectamente. Gracias por su ayuda. –

1

ISession.Save tiene una sobrecarga que le permite especificar el identificador. Intente usarlo, y no configure su propiedad de identificación manualmente.

0

Como valor añadido a la respuesta de James utilicé:

Id(x => x.ID) 
    .GeneratedBy.Assigned() 
    .UnsavedValue(default_value); 

Tenga en cuenta que default_value es el valor predeterminado para su tipo Id
como en mí es 0L porque uso long para mi Id

Cuestiones relacionadas