5

Ci ho messo un po 'per trovare una risposta per questo, così ho pensato di condividere l'amore.Utilizzo del mapping NHibernate in base al codice: Impossibile inserire il valore esplicito per la colonna Identity nella tabella "DietUser" quando IDENTITY_INSERT è impostato su OFF


Quando si utilizza la mappatura del nuovo NHibernate per codice con SQL Server Sono in grado di salvare un'entità. Quando si salva un soggetto uno System.Data.SqlClient.SqlException è gettato con il seguente messaggio (meno il nome della tabella):

"Impossibile inserire valore esplicito per la colonna identity nella tabella 'DietUser' quando IDENTITY_INSERT è impostato su OFF ".

Il mio tavolo utilizza un ID identità e l'entità & mapping simile a questa:

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); 
    } 
} 

so come avrei Visualizza la mappa utilizzando il mapping XML ma voglio utilizzare il built-in mapping codice se possibile.

risposta

10

Dopo aver scavato nei forum, sono stato fortunato e ho trovato come mappare questo. Il example Fabio provides è ottimo se si intende utilizzare un GUID per un ID o qualcosa del genere ma se si desidera utilizzare un ID identità (visto anche un gruppo di altri), è necessario specificare quale generatore si sta per uso. Ecco il mio mappatura aggiornata che funziona:

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

Quindi stai usando il GUID come colonna di identità? –

+0

No, solo la colonna Identity int standard verrà visualizzata nella maggior parte delle tabelle server SQL. – bressain

0

Si sta tentando di assegnare il valore alla proprietà Id prima di mantenere l'entità? Puoi aggiungere la parte di codice che sta tentando di mantenere le modifiche al database?

Durante l'apprendimento di NHibernate, ho creato una piccola demo che illustra l'esempio introduttivo. Ecco qui. Hope aiuta.

+0

Non ero, è quello che mi ha infastidito. Stavo solo impostando Nome, Username, Password e DailyPoints. – bressain

1

Parlando di ids di identità, se si imposta generator=identity, NHibernate non sarebbe in grado di eseguire inserto in batch, perché ha bisogno di una richiesta supplementare per ottenere questo id sanguinosa generato dal database.

Problemi correlati