5

Sto utilizzando una soluzione NHIbernate utilizzando SQL CE. Sto mappando uno dei campi in una tabella come di seguito. Tuttavia, per eseguire alcune importazioni di dati, devo essere in grado di disattivare temporaneamente l'identità in modo da poter importare i dati con le chiavi esistenti, quindi riattivare l'identità una volta terminata l'importazione.NHibernate -Temporaneamente disattiva l'identità

Ho provato in esecuzione di una query SQL direttamente dalla soluzione di questo tipo:

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] ON"); 

ma questo sembra non avere alcun effetto.

C'è un modo per attivare e disattivare temporaneamente questo?

Property(x => x.ArticleId, m => 
{ 
    m.NotNullable(true); 
    m.UniqueKey("UQ_Article_ArticleId"); 
    m.Column(cm => cm.SqlType("INT IDENTITY")); 
    m.Generated(PropertyGeneration.Insert); 
    m.Insert(true); 
    m.Update(false); 
}); 

risposta

0

Alla fine era qualcosa di abbastanza semplice.

La linea di SQL avrebbe dovuto essere questo:

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] ON").ExecuteUpdate(); 

e aveva bisogno di essere all'interno di una transazione. Tuttavia, puoi farlo solo su una tabella per transazione, quindi non mi è stato di grande aiuto.

+0

Qualcuno ha davvero funzionato? – Dan

0

SQL dovrebbe essere un modo per andare, ma credo che avete invertito il senso di IDENTITY_INSERT.

Per consentire l'inserimento nella colonna Identity, è necessario trasformarlo in ON.

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] ON"); 

E dopo aver fatto la vostra massa inserita, girare di nuovo a OFF.

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] OFF"); 

Maggiori dettagli su MSDN.

+0

Sì, l'ho provato ma non funziona. Il mio esempio sopra mostrava semplicemente come sto eseguendo l'SQL. In pratica ho fatto il modo in cui hai menzionato. "On" prima quindi "Off" in seguito. – user874615