ホームページ >データベース >mysql チュートリアル >Entity Framework が手動でキーを指定した場合でもキーを自動的にインクリメントするのはなぜですか?
Entity Framework と手動で割り当てられたキー: トラブルシューティング ガイド
Entity Framework のコードファーストのアプローチを使用する場合の一般的な課題には、キーが手動で割り当てられている場合でも、フレームワークがキーを自動的にインクリメントする傾向が含まれます。 この記事では、解決策とその潜在的な落とし穴について詳しく説明します。
開発者が最近この問題に遭遇しました。 キー値を明示的に設定したにもかかわらず、Entity Framework は自動インクリメントを続けました。 HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
:
<code class="language-csharp">modelBuilder.Entity<event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
...次のエラーが発生しました:
<code>Unhandled Exception: System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. --- System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'Events' when IDENTITY_INSERT is set to OFF.</code>
このエラーは、「イベント」テーブルの IDENTITY_INSERT
が OFF に設定されているために発生します。 これを解決するには、手動で指定したキーを持つデータを挿入するIDENTITY_INSERT
前に を明示的に ON に設定する必要があります。 これにより、データベースは事前に割り当てられたキー値を受け入れることができます。
また、属性でも同じ結果を達成できます。
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EventID { get; set; }</code>
このアプローチは、Entity Framework と Entity Framework Core の両方で機能します。 重要なのは、データベースの IDENTITY_INSERT
設定を正しく管理して、主キー値を手動で割り当てるときに競合を回避することです。 標準のデータベース動作のために、挿入が完了したら、忘れずにこれを OFF に戻してください。
以上がEntity Framework が手動でキーを指定した場合でもキーを自動的にインクリメントするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。