16

我遇到了 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)在当前上下文中不存在的异常。

4

1 回答 1

23

您同时使用了两种方法 - 您的连接字符串表示您希望首先使用模型或使用 EDMX 的数据库,但您正在编写上下文以使用代码优先/流利的 api 来映射数据库。一旦你使用 EDMXOnModelCreating就永远不会被调用。如果您想使用没有元数据资源的通用 SQL 连接字符串,请使用OnModelCreating.

<add name="AcmeDBContext"
     connectionString="data source=[server];
                       initial catalog=Acme;integrated security=True;
                       multipleactiveresultsets=True;App=EntityFramework"
     providerName="System.Data.SqlClient" />
于 2011-10-24T13:59:55.223 回答