5

Używam rozwiązania NHIbernate przy użyciu SQL CE. Mapuję jeden z pól w tabeli, tak jak poniżej. Jednak, aby uruchomić import danych, muszę mieć możliwość tymczasowego wyłączenia tożsamości, aby móc zaimportować dane za pomocą istniejących kluczy, a następnie przywrócić tożsamość po zakończeniu importu.NHibernate - Tymczasowo wyłącz tożsamość

Próbowałem uruchomiony zapytania SQL bezpośrednio z roztworu tak:

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

ale to wydaje się nie mieć wpływu.

Czy istnieje sposób tymczasowego włączenia i wyłączenia tej funkcji?

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

Odpowiedz

0

To było coś dość prostego na końcu.

Linia sql powinno być tak:

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

i musiał być wewnątrz transakcji. Jednak możesz to zrobić tylko w jednej tabeli na transakcję, więc tak naprawdę nie pomogło mi to tak bardzo.

+0

Czy ktoś faktycznie to działa? – Dan

0

SQL powinna być droga, ale wierzę, że masz odwrócić sens IDENTITY_INSERT.

Aby zezwolić na wstawienie do kolumny tożsamości, należy zmienić ją na ON.

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

I po wykonaniu Twój luzem włożona, włącz go z powrotem do OFF.

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

Więcej informacji na temat MSDN.

+0

Tak, próbowałem, ale nie działa. Mój przykład powyżej po prostu pokazuje, jak wykonać SQL. W praktyce robiłem tak, jak wspomniałeś. Najpierw włącz "Włącz", a następnie "Wyłącz". – user874615