ホームページ >バックエンド開発 >C++ >Entity Framework が主キーを自動的に生成しないようにするにはどうすればよいですか?

Entity Framework が主キーを自動的に生成しないようにするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-14 09:56:43441ブラウズ

How to Prevent Entity Framework from Automatically Generating Primary Keys?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。