Я использую конструкции Code First для подключения к существующей базе данных (которая, я знаю, технически не является первым кодом). Я делаю это для того, чтобы смоделировать хранилище поддельных данных, используя LINQ to Entities вместо LINQ to SQL. В прошлом году в CTP3 это работало отлично - я мог создать новую конфигурацию для своей таблицы и явно добавить свойства POCO, которые были сопоставлены с базой данных.
В июле 2011 года Code First был включен в EF4.1, поэтому я решил обновить его. К сожалению, EF сейчас слишком умный, на мой взгляд. Например, а) предполагается, что все свойства моих POCO сопоставлены с полями базы данных, поэтому, например, свойство Person.TempPassword {get; set;} заставляет сгенерированный SQL искать столбец TempPassword в моей таблице Person; б) если я наследую класс от своего POCO (например, Employee наследует от Person), EF начнет генерировать столбцы Discriminator и т. д.
Я знаю, что могу решить первую проблему, используя атрибуты Ignore () или [NotMapped], однако это большая проблема, и я предпочел бы не делать этого. Последняя проблема, которую я не могу решить.
Все, что мне нужно, это способ отключить все эти смарты, и просто позвольте мне явно установить свойства, как я делал раньше. Обратите внимание, что я также попытался удалить все ограничения, например, modelBuilder.Conventions.Remove ();
Я также переопределил вызов OnModelCreating () и НЕ вызывал base.OnModelCreating (), просто включил мой собственный код конфигурации, как показано ниже.
Пример моей конфигурации:
public class AddressBookConfiguration : EntityTypeConfiguration<AddressBook>{
public AddressBookConfiguration()
{
this.HasKey(x => x.AddressBookID);
this.ToTable("AddressBook");
this.Property(x => x.AddressBookID);
this.Property(x => x.AddressBookName);
this.Property(x => x.WhenCreated);
this.Property(x => x.TotalItems);
}
}
Спасибо.