5

Me tomó un tiempo encontrar una respuesta para esto, así que pensé en compartir el amor.Uso de la asignación de NHibernate por código: No se puede insertar un valor explícito para la columna de identidad en la tabla 'DietUser' cuando IDENTITY_INSERT está establecido en OFF


Cuando uso la nueva asignación de NHibernate por código con SQL Server no puedo guardar una entidad. Al guardar una entidad un System.Data.SqlClient.SqlException se lanza con el siguiente mensaje (menos el nombre de la tabla):

"No se puede insertar valor explícito para la columna de identidad en la tabla 'DietUser' cuando IDENTITY_INSERT está en OFF "

Mi tabla utiliza un identificador de la identidad y la entidad & asignaciones aspecto:

public class User 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Username { get; set; } 
    public virtual string Password { get; set; } 
    public virtual short DailyPoints { get; set; } 
} 

public class UserMapping : ClassMapping<User> 
{ 
    public UserMapping() 
    { 
     Id(x => x.Id); 
     Property(x => x.Name); 
     Property(x => x.Username); 
     Property(x => x.Password); 
     Property(x => x.DailyPoints); 
    } 
} 

Yo sé cómo me Ubicación del uso de mapeo XML pero quiero utilizar el incorporado en la asignación de código si es posible.

Respuesta

10

Después de buscar en los foros tuve suerte y encontré cómo mapear esto. El example Fabio provides es ideal si va a usar un GUID para una identificación o algo por el estilo, pero si desea usar una identificación (también vio una gran cantidad de otras), debe especificar a qué generador se dirige. utilizar. Aquí está mi mapeo actualizado que funciona:

public class UserMapping : ClassMapping<User> 
{ 
    public UserMapping() 
    { 
     Id(x => x.Id, map => map.Generator(Generators.Identity)); 
     Property(x => x.Name); 
     Property(x => x.Username); 
     Property(x => x.Password); 
     Property(x => x.DailyPoints); 
    } 
} 
+0

¿Está utilizando GUID como columna de identidad? –

+0

No, solo la columna de identidad int estándar que verá en la mayoría de las tablas de servidor sql. – bressain

0

¿Está tratando de asignar el valor a la propiedad Id antes de continuar con la entidad? ¿Puedes agregar la parte del código que intenta persistir en los cambios a la base de datos?

Mientras comencé a aprender NHibernate, había creado una pequeña demostración para el ejemplo de cómo empezar. Aquí está. Hope ayuda.

+0

No estaba, eso es lo que me molestó. Solo estaba configurando el Nombre, Nombre de usuario, Contraseña y DailyPoints. – bressain

1

Hablando de identificadores de identidad, si se establece generator=identity, NHibernate no sería capaz de realizar operaciones de inserción por lotes, ya que necesita una solicitud adicional para obtener esta sangrienta ID generado por la base de datos.

Cuestiones relacionadas