c# - 如果我的模型发生变化,如何在 EF 中重新创建数据库?

标签 c# .net entity-framework

我像这样创建了一个 DbContext :

   public class myDB : DbContext
   {
     public DbSet<Party> Parties { get; set; }
     public DbSet<Booking> Bookings { get; set; }
   }

这生成了我的数据库和上面的两个表..太棒了

然后我决定将另一个 DbSet 添加到组合中,但出现错误:

the model backing the 'Party' context has changed since the database was created

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

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

2) 在我自己解决这个问题的徒劳尝试中,我删除了表并尝试重新运行应用程序但没有成功,然后我删除了完整的数据库并重新运行并且它没有重新生成数据库。我如何从头开始 - 某处是否有一些缓存?

最佳答案

我相信您正在寻找:

Database.SetInitializer<ClubmansGuideDB>(new DropCreateDatabaseIfModelChanges<ClubmansGuideDB>());

从 EF 4.1 及更高版本开始。

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

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

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

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

关于c# - 如果我的模型发生变化,如何在 EF 中重新创建数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793184/

相关文章:

c# - WithArgumentsForConstructor() 扩展方法调用构造函数

c# - 在 mysql 上使用带有参数的 Database.ExecuteSqlCommand 的正确语法是什么?

c# - 使用 Javascript 单击按钮

编译器未找到泛型类型类的 C# 扩展方法

.net - 将字符串解析为整数(无论 hell 还是高水位)

c# - 比较对象?

c# - 如何在C#中获取DHCP信息?

c# xamarin forms - 具有属性的自定义控件上的自定义事件

entity-framework - EntityFramework 不保存 null 和 false 值

c# - .Net Core获取ApplicationUser的对象