ホームページ >データベース >mysql チュートリアル >Entity Framework が手動でキーを指定した場合でもキーを自動的にインクリメントするのはなぜですか?

Entity Framework が手動でキーを指定した場合でもキーを自動的にインクリメントするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-15 19:11:42210ブラウズ

Why Does Entity Framework Auto-Increment Keys Even When Manually Specified?

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

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