5

Ich verwende eine NHIbernate-Lösung mit SQL CE. Ich mappe eines der Felder in einer Tabelle wie folgt. Um einige Datenimporte auszuführen, muss ich jedoch die Identität vorübergehend deaktivieren können, damit ich die Daten mit den vorhandenen Schlüsseln importieren und die Identität wieder aktivieren kann, sobald der Import abgeschlossen ist.NHibernate - Zeitweise die Identität deaktivieren

Ich habe versucht, eine SQL-Abfrage direkt aus der Lösung wie folgt ausgeführt werden:

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

aber dies scheint keine Wirkung zu haben.

Gibt es eine Möglichkeit, diese ein- und auszuschalten?

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

Antwort

0

Es war etwas ziemlich einfach am Ende.

Die SQL-line sein sollte:

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

und es benötigt innerhalb einer Transaktion sein. Allerdings können Sie dies nur pro Transaktion an einer Tabelle tun, was mir nicht wirklich geholfen hat.

+0

Hat jemand das wirklich funktioniert? – Dan

0

SQL sollte ein Weg zu gehen, aber ich glaube, dass Sie die Bedeutung von IDENTITY_INSERT umgekehrt haben.

Um das Einfügen in die Identitätsspalte zu ermöglichen, müssen Sie sie in ON umwandeln.

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

Und nachdem Sie Ihre Bulk eingefügt getan haben, schalten Sie ihn auf OFF zurück.

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

Weitere Details unter MSDN.

+0

Ja, ich habe das versucht, funktioniert aber nicht. Mein Beispiel oben zeigte nur, wie ich SQL ausführe. In der Praxis habe ich so verfahren, wie du es erwähnt hast. "An" zuerst dann "Aus" danach. – user874615