永远不会调用OnModelCreating

我正在开始使用entity framework。 问题是我的OnModelCreating方法永远不会被调用。

这是我的上下文类:

public class TestContext : DbContext { public TestContext() : base("name=TestDBConnectionString") { } public DbSet WorkItems { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } } 

连接字符串

   

我打算在打电话时进入OnModelCreating:

  using (var context = new TestContext()) { } 

我犯错误的地方?

尝试将新实体添加到上下文并保持更改。

喜欢

 using (var context = new TestContext()) { context.WorkItem.Add(new WorkItem()); //Construct valid entity context.SaveChanges(); } 

默认情况下,如果数据库不存在,它将尝试创建数据库。 或者至少会抛出exception。

或者您可以强制它在启动时创建数据库

context.Database.Initialize(真);

https://msdn.microsoft.com/en-us/library/system.data.entity.database.initialize(v=vs.113).aspx

在初始化派生上下文的模型时,但在锁定模型并用于初始化上下文之前,将调用此方法。

通常,只有在创建派生上下文的第一个实例时才调用此方法一次。 然后缓存该上下文的模型,该模型适用于app域中上下文的所有其他实例。 可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存,但请注意,这会严重降低性能。
请参阅MSDN

如果数据库不存在,则使用编译模型中的信息来创建它。 每个应用程序仅创建一次模型。 使用Database First方法时,永远不会调用OnModelCreating。 永远不会调用它,因为EDMX中已经存在所有映射,因此从不使用Code First和DbModelBuilder。

尝试在进行SetInitializer调用之前调用静态初始化程序:

 using (var context = new TestContext()) { Database.SetInitializer(new CreateDatabaseIfNotExists()); context.Database.Initialize(true); } 

在我的情况下,这发生了,因为我离开了{get; 组; 关闭我的DBSet声明。 花了一段时间才弄清楚!