我创建了一个像这样的DbContext:
public class myDB : DbContext
{
public DbSet<Party> Parties { get; set; }
public DbSet<Booking> Bookings { get; set; }
}
这生成了我的DataBase和上面的两个表.Great
然后我决定在混音和放大器中添加另一个DbSet。我收到了一个错误:
支持'Party'上下文的模型自创建数据库以来已发生变化
我知道使用modelbuilder.IncludeMetadataInDatabase = false;
和Database.SetInitializer<ClubmansGuideDB>(null);
1)将新类添加到上下文并在DataBase中生成它们的正确方法是什么?
2)在我自己试图解决这个问题的过程中,我删除了表并尝试重新运行应用程序但没有成功,然后我删除了完整的数据库并重新运行,它不会重新生成数据库。我怎样才能从头开始 - 某处有缓存吗?
答案 0 :(得分:15)
我相信你在寻找:
Database.SetInitializer<ClubmansGuideDB>(new DropCreateDatabaseIfModelChanges<ClubmansGuideDB>());
自EF 4.1及以上版本起。
请注意,这假设您有权删除数据库。我在本地这样做是为了便于开发,但在暂存/生产中禁用它(我做一个手动架构比较并推送我的更改)。
顺便说一下,为了测试,如果你需要强制重新创建数据库,你可以这样做:
using (var context = new ClubmansGuideDB()) {
context.Database.Initialize(force: true);
}
(using
如果您还没有对数据库的引用)
答案 1 :(得分:3)
您可以让实体框架使用Database Initializer
重新创建整个数据库,或者如果您想迁移数据,可以查看Code First Migrations
以下内容将在模型更改时重新创建数据库:
Database.SetInitializer<myDB>(new DropCreateDatabaseIfModelChanges<myDB>());
答案 2 :(得分:0)
尝试将它放在Global.asax.cs Application_Start()方法中。
Database.SetInitializer<DatabaseContext>(null);
要在app run上从头开始重置数据库,请创建一个类似
的类//Where myDB is your context
public class EntityBase: DropCreateDatabaseAlways<myDB>
{
}
然后在你的Application_Start()方法中你可以这样做
Database.SetInitializer(new EntityBase());