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 はテーブル欠落例外が発生することなく正しいテーブル名を使用できるようになります。
追加のヒント:
次の手順に従うことで、テーブル名の複数形を解決できるはずです。不一致の問題が解決され、ビューから「投票」テーブルに正常にアクセスできます。
以上がモデルが単数名を予期しているのに、Entity Framework が MySQL のテーブル名を複数形にするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。