2

私は自分の問題に対する適切な解決策を見つけることができなかったので、ここにあなたへの私の質問があります:

Entity Framework(5.0)で、実際のデータベース(SQL Server 2005)にID列が定義されていない場合に自動作成されるID列(PK)を設定するにはどうすればよいですか?

StoreGeneratedPatternを見たことがありますが、データベースにIDがないとこれがどのように機能するかわかりません。手動のアプローチでは、POCOにMAX(id)+1を手動で入力しますが、これはハックのように感じられ、複数のリクエストが次のテーブルにレコードを挿入する可能性があるマルチスレッド環境で問題が発生するのではないかと心配しています。 「同じ」時間。

データベース内のテーブルスキーマを変更する可能性がないことに注意してください。

これを解決するための最良の方法は何ですか?

4

1 に答える 1

0

アプリケーションの1つのインスタンスだけがこのテーブルに行を挿入する場合は、MAX(Id) + 1ハックで十分です。それ以外の場合は、データベーススキーマを変更して、挿入時にこれらの値を生成する必要があります。IDENTITYを使用するか、トリガーやsprocなどを使用して車輪の再発明を行います。

ソリューションが何であれ、トランザクションが1つ以上の挿入をロールバックした場合でも、重複するキーが生成されないことを保証する必要があります。

他に何もテーブルに挿入されない場合は、互換性を損なうことなくIDをID列に変更できるはずです。

参考: Entity FrameworkのStoreGeneratedPattern(またはDatabaseGeneratedOption)は、挿入および更新時に値がどのように処理されるかを指定するだけです。を使用Identityすると、挿入時にデータベースによって値が生成されることが期待されることをEFに通知します。Computed挿入と更新の両方で生成されることを意味します。

于 2013-03-26T16:48:22.680 に答える