我有一个问题,EF 4.1没有调用OnModelCreating
,所以我可以配置表等。我有一个现有的数据库。这是我的连接字符串:
<add name="AcmeDBContext"
connectionString="metadata=res://*/|res://*/|res://*/;
provider=System.Data.SqlClient;
provider connection string="
data source=[server];
initial catalog=Acme;integrated security=True;
multipleactiveresultsets=True;App=EntityFramework""
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)的异常。
答案 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" />