EF 4.1 OnModelСоздание не вызывается - PullRequest
16 голосов
/ 24 октября 2011

У меня проблема с тем, что EF 4.1 не вызывает OnModelCreating, поэтому я могу настроить таблицы и т. Д. У меня есть существующая база данных.Вот моя строка подключения:

<add name="AcmeDBContext"
     connectionString="metadata=res://*/|res://*/|res://*/;
                       provider=System.Data.SqlClient;
                       provider connection string=&quot;
                       data source=[server];
                       initial catalog=Acme;integrated security=True;
                       multipleactiveresultsets=True;App=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

Вот мой класс, унаследованный от DbContext:

public class AcmeDBContext : DbContext
{
  public AcmeDBContext()
    : base()
  {
    Database.SetInitializer<AcmeDBContext>(null);        
  }

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();       
    modelBuilder.Entity<Vehicle>().ToTable("tblVehicle");
    modelBuilder.Entity<VehicleMake>().ToTable("tblVehicleMake");
    modelBuilder.Entity<VehicleModel>().ToTable("tblVehicleModel");
    base.OnModelCreating(modelBuilder);
  }

 }

Я читал и читал онлайн, но не могу указать, в чем проблема,OnModelCreating никогда не вызывается, и, следовательно, исключения говорят о том, что сущность / классы (Vehicle, VehicleMake, VehicleModel) не существуют в текущем контексте, когда я пытаюсь что-либо запросить.

1 Ответ

22 голосов
/ 24 октября 2011

Вы используете два подхода вместе - ваша строка соединения говорит, что вы хотите сначала использовать модель или базу данных с EDMX, но вы пишете контекст, чтобы использовать код сначала / свободный API для отображения базы данных. После того, как вы используете EDMX OnModelCreating никогда не вызывается. Используйте общую строку соединения SQL без ресурсов метаданных, если вы хотите использовать OnModelCreating.

<add name="AcmeDBContext"
     connectionString="data source=[server];
                       initial catalog=Acme;integrated security=True;
                       multipleactiveresultsets=True;App=EntityFramework"
     providerName="System.Data.SqlClient" />
...