ホームページ  >  記事  >  データベース  >  モデルが単数名を予期しているのに、Entity Framework が MySQL のテーブル名を複数形にするのはなぜですか?

モデルが単数名を予期しているのに、Entity Framework が MySQL のテーブル名を複数形にするのはなぜですか?

DDD
DDDオリジナル
2024-10-29 09:25:30268ブラウズ

Why Does Entity Framework Pluralize Table Names in MySQL When My Model Expects a Singular Name?

Entity Framework テーブル名の複数形化の不一致

Entity Framework (EF) は、モデル クラス名が単数エンティティを表すという規則に基づいて、テーブル名を自動的に複数形にするように設計されています。ただし、場合によっては、モデルまたはビューが単数形の名前を予期しているのに、EF が複数形のテーブル名を作成するという不一致が発生することがあります。

問題:

提供されたコードは Vote という名前のモデルを定義し、MySQL で "vote" という名前のテーブルを期待します。ただし、EF は代わりに「votes」という名前のテーブルを作成します。ビューからテーブルにアクセスしようとすると、「vote」テーブルが存在しないことを示す例外が発生します。

考えられる原因:

MySQL .NET コネクタEF のテーブル名の複数形化規則を完全にはサポートしていない可能性があります。

解決策:

この問題を解決するには、EF でテーブル名の複数形化の動作をカスタマイズできます。手順は次のとおりです。

1. OnModelCreating メソッドのカスタマイズ:

DbContext クラスで、OnModelCreating メソッドをオーバーライドし、PluralizingTableNameConvention を無効にします。

<code class="csharp">protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}</code>

2.初期データベース作成の削除:

Entity Framework Initializer を使用して、データベースの作成と初期化を行うことができます。ただし、MySQL の .NET コネクタでは、EF によるデータベースの作成が許可されない場合があります。この問題を防ぐには、EF がデータベースを作成する前にデータベースが存在することを確認してください。

<code class="csharp">// Remove database creation initializer
// Database.SetInitializer(new DropCreateDatabaseAlways<myDB>());</code>

3.基本モデル作成の呼び出しを停止します:

カスタマイズをオーバーライドし、テーブル名の複数形化を再度有効にする可能性があるため、OnModelCreating の基本実装が呼び出されないようにします。

<code class="csharp">// Don't call the base implementation
// base.OnModelCreating(modelBuilder);</code>

4.存在しない場合はデータベースを作成:

データベースが存在しない場合は手動で作成します。これにより、EF はテーブル欠落例外が発生することなく正しいテーブル名を使用できるようになります。

追加のヒント:

  • 明示的に指定するには、[Table] 属性を使用します。必要に応じてテーブル名を入力します。
  • EF のテーブル名規則を完全にサポートする別のデータベース プロバイダーの使用を検討してください。

次の手順に従うことで、テーブル名の複数形を解決できるはずです。不一致の問題が解決され、ビューから「投票」テーブルに正常にアクセスできます。

以上がモデルが単数名を予期しているのに、Entity Framework が MySQL のテーブル名を複数形にするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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