EF 4.1 OnModelCreating未调用

时间:2011-10-24 13:46:12

标签: c# entity-framework-4.1 dbcontext

我有一个问题,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 个答案:

答案 0 :(得分:22)

您正在使用两种方法 - 您的连接字符串表示您希望首先使用模型或首先使用EDMX数据库,但是您正在编写上下文以使用代码优先/流畅的api来映射数据库。一旦你使用EDMX OnModelCreating永远不会被调用。如果要使用OnModelCreating,请使用不带元数据资源的公共SQL连接字符串。

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