5

SQL CE を使用して NHIbernate ソリューションを実行しています。以下のように、テーブル内のフィールドを 1 つマッピングしています。ただし、一部のデータ インポートを実行するには、ID を一時的にオフにして既存のキーを使用してデータをインポートし、インポートが完了したら ID をオンに戻す必要があります。

次のように、ソリューションから直接 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);
});
4

2 に答える 2

0

SQL は進むべき道のはずですが、あなたは の意味を逆にしたと思いますIDENTITY_INSERT

ID 列への挿入を許可するには、それを に変更する必要がありますON

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

一括挿入が完了したら、元に戻しOFFます。

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

詳細については、MSDNを参照してください。

于 2012-10-10T12:11:03.723 に答える
0

それは最終的にかなり単純なものでした。

SQL 行は次のようになっているはずです。

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

トランザクション内にある必要がありました。ただし、これはトランザクションごとに 1 つのテーブルでしか実行できないため、あまり役に立ちませんでした。

于 2012-10-11T17:31:29.203 に答える