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

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

public class myDB : DbContext { public DbSet Parties { get; set; } public DbSet Bookings { get; set; } } 

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

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

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

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

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

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

我相信你在寻找:

 Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); 

截至EF 4.1及以上版本。

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

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

 using (var context = new ClubmansGuideDB()) { context.Database.Initialize(force: true); } 

(如果您还没有对数据库的引用,请使用)

您可以让Entity Framework使用Database Initializer重新创建整个数据库,或者如果您想迁移数据,可以查看Code First Migrations

以下将在模型更改时重新创建数据库:

 Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); 

尝试将它放在Global.asax.cs Application_Start()方法中。

 Database.SetInitializer(null); 

要在app run上从头开始重置数据库,请创建一个这样的类

 //Where myDB is your context public class EntityBase: DropCreateDatabaseAlways { } 

然后在Application_Start()方法中,您可以执行此操作

 Database.SetInitializer(new EntityBase());