Hibernate などの ORM フレームワーク、さらには Entity Framework 3.0 の経験があります。
デフォルトでは、これらのフレームワークはテーブルに単数形の名前を使用します。たとえば、クラス User はテーブル User にマップされます。
しかし、Visual Studio 2012 を使用して EF 5.x に移行すると、複数形の名前が使用され、as を使用してそのクラスを手動でマップしない限り、多くのエラーが発生しTableAttribute
ます。
[Table("User")]
public class User {
// ...
}
なしTableAttribute
で、DbContext
以下の場合:
public CustomContext : DbContext {
// ...
public DbSet<User> Users { get; set; }
}
次に呼び出します:
var list = db.Users.ToList();
生成された sql は次のようになります。
Select [Extent1].[Username] From [Users] as [Extent1]
したがって、 Usersという名前のテーブルがないため、エラーが発生します。さらに、単数形から複数形への名前テーブルを参照します。このリンクで理由がわかります
なぜ Microsoft は EF 3.0 と同じではなく、そのように EF 5.x を実装するのだろうか?
更新しました:
コンテキスト クラスで次のコードを使用することにより、複数形の名前を使用しないように EF に指示できます。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
EF ツールが複数形の名前を生成したとしても、元のデータベースへのマッピングを保持する必要がありますね。一部のユーザーは、クラスのフィールドの名前をいくつか変更したい場合があるためです。EF 3.0 は正常に機能しますが、EF 5.x は機能しません。
みんな、理由を教えてください!