NHibernate - 暂时关闭标识



我正在使用SQL CE运行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);
});

SQL应该是一条路,但我相信你已经颠倒了IDENTITY_INSERT的含义。

要允许插入到标识列,您需要将其转换为 ON

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

完成批量插入后,将其转回 OFF .

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

有关 MSDN 的更多详细信息。

最后,这是一件相当简单的事情。

sql 行应该是这样的:

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

它需要在事务中。但是,每笔交易只能在一张桌子上执行此操作,因此对我并没有太大帮助。

最新更新