如果模型更改,如何在EF中重新创建数据库?

Len*_*lly 5 .net c# entity-framework

我创建了一个像这样的DbContext:

   public class myDB : DbContext
   {
     public DbSet<Party> Parties { get; set; }
     public DbSet<Booking> Bookings { get; set; }
   }
Run Code Online (Sandbox Code Playgroud)

这生成了我的DataBase和上面的两个表......很棒

然后我决定在混合中添加另一个DbSet,我收到一个错误:

自创建数据库以来,支持"Party"上下文的模型已更改

我知道使用modelbuilder.IncludeMetadataInDatabase = false;和修复此问题Database.SetInitializer<ClubmansGuideDB>(null);

1)将新类添加到上下文并在DataBase中生成它们的正确方法是什么?

2)我自己试图解决这个问题,我删除了表并试图重新运行应用程序但没有成功我然后删除了完整的数据库并重新运行它并没有重新生成数据库.我怎样才能从头开始 - 某处有缓存吗?

kam*_*cus 15

我相信你在寻找:

Database.SetInitializer<ClubmansGuideDB>(new DropCreateDatabaseIfModelChanges<ClubmansGuideDB>());
Run Code Online (Sandbox Code Playgroud)

截至EF 4.1及以上版本.

请注意,这假设您有权删除数据库.我在本地这样做是为了便于开发,但在暂存/生产中禁用它(我做一个手动架构比较并推送我的更改).

顺便说一下,为了测试,如果你需要强制重新创建数据库,你可以这样做:

using (var context = new ClubmansGuideDB()) {
    context.Database.Initialize(force: true);
}
Run Code Online (Sandbox Code Playgroud)

(using如果您还没有对数据库的引用)