Entity Framework での自動主キー生成の抑制
Entity Framework のコードファーストのアプローチでは、多くの場合、主キー、特に自動インクリメント ID 列が自動的に生成されます。 この自動的な動作は常に適切であるとは限りません。 この記事では、このデフォルト機能をオーバーライドする方法について概要を説明します。
一般的なアプローチの 1 つは、流暢な API 構成を使用します。
<code class="language-csharp">modelBuilder.Entity<Event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
ただし、これにより「IDENTITY_INSERT が OFF に設定されている場合、テーブル 'Events' の ID 列に明示的な値を挿入できません。」というエラーが発生する可能性があります。
エラーを理解する
このエラーは競合によって発生します。 DatabaseGeneratedOption.None
は EF が ID を生成するのを防ぎますが、データベース テーブルはまだ IDENTITY
プロパティを保持しているため、キー値を手動で割り当てようとすると衝突が発生します。
解決策
この解決策には、データベース内の ID 列の IDENTITY
プロパティを無効にすることが含まれます。 次の SQL コマンドを使用します:
<code class="language-sql">ALTER TABLE Events ALTER COLUMN EventID INT NOT NULL</code>
属性ベースの代替
あるいは、エンティティ クラス内で属性を直接利用することもできます。
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EventID { get; set; }</code>
このメソッドは EF Core でも正しく機能します。
これらのソリューションを実装することで、開発者は値を手動で指定し、EF のデフォルトの自動生成をバイパスして、主キーの割り当てを制御できるようになります。
以上がEntity Framework が主キーを自動的に生成しないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。