Почему EF 5.x использует имя множественного числа для таблицы?
У меня был некоторый опыт работы со средой ORM, такой как Hibernate, и даже Entity Framework 3.0.
По умолчанию эти структуры используют единственное имя для таблицы. Например, класс User будет сопоставлен с таблицей User.
Но когда я перехожу на EF 5.x с помощью Visual Studio 2012, он использует множественное имя и вызывает много ошибок, если я вручную не сопоставлю этот класс с помощью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]
Поэтому ошибка произойдет, потому что у меня нет таблицы с именемпользователей, Кроме того, я имею в виду таблицы имен в единственном числе во множественном числе. Вы можете понять, почему вэта ссылка
Интересно, почему Microsoft реализует EF 5.x таким образом, а не EF 3.0?
Обновлено:
Мы можем сказать EF не использовать множественное имя, используя этот код в классе контекста:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
Даже если инструмент EF генерирует множественное имя, он должен сохранять сопоставления с исходной базой данных, не так ли? Потому что некоторые пользователи могут захотеть изменить несколько имен полей в своем классе. EF 3.0 работает хорошо, а EF 5.x - нет.
Ребята, подскажите пожалуйста причину!