5

我正在運行使用SQL CE的NHIbernate解決方案。 我正在映射一個表中的字段,如下所示。 但是,爲了運行某些數據導入,我需要能夠暫時關閉身份,以便可以使用其現有密鑰導入數據,然後在導入完成後再打開身份。NHibernate - 暫時關閉標識

我已經試過直接從像這樣的解決方案上運行的SQL查詢:

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

但這似乎沒有任何效果。

有什麼方法可以暫時打開和關閉這個功能嗎?

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

回答

0

最後這是相當簡單的事情。

在SQL行應該是這樣的:

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

,它需要的是一個事務中。但是,每次交易只能在一張桌子上做到這一點,所以並沒有真正幫助我。

+0

有沒有人真的有這個工作? – Dan

0

SQL應該是很長的路要走,但我相信你已經扭轉的IDENTITY_INSERT意義。

要允許插入到標識列,您需要將其轉換爲ON

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

並且在完成批量插入後,將其重新設置爲OFF

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

有關MSDN的更多詳細信息。

+0

是的,我試過,但沒有奏效。我上面的示例只是顯示了我如何執行SQL。在實踐中,我一直在按照你提到的方式。之後,首先「開」,然後「關」。 – user874615