Entity Framework での自動インクリメントのバイパス: 実践ガイド
Entity Framework の主キーの自動生成は、キー値を手動で割り当てる必要がある場合に問題が発生する可能性があります。 自動インクリメント動作をオーバーライドしようとしたときに発生するエラーが示すように、これは競合を引き起こすことがよくあります。
当初、次のコードは、Entity Framework が主キーを自動的に管理しないようにするために使用されました。
<code class="language-csharp">modelBuilder.Entity<event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
ただし、これにより SqlException
が発生しました。「IDENTITY_INSERT が OFF に設定されている場合、テーブル 'Events' の ID 列に明示的な値を挿入できません。」 これは、データベースの IDENTITY_INSERT
が無効になっており、ID 列に値を直接挿入できないためです。
より堅牢なソリューションでは、特に Entity Framework Core を使用した、よりクリーンで互換性の高いアプローチのために DataAnnotations 属性を利用します。
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; }</code>
このコード スニペットは、Id
プロパティを主キー ([Key]
) として宣言し、値の自動生成 ([DatabaseGenerated(DatabaseGeneratedOption.None)]
) を明示的に無効にします。これにより、Entity Framework との互換性を維持しながら、主キーを手動で割り当てることができます。 この方法は、IDENTITY_INSERT
問題を効果的に回避し、主キーを管理するためのより洗練されたソリューションを提供します。
以上が「IDENTITY_INSERT」エラーを回避しながらEntity Frameworkで主キーを手動で設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。