Entity framework EntityFramework 6.0 CreateDatabaseIfNoteExists代码在创建初始结构之前首先尝试迁移
我有一个完美工作的EF6.0 DbContext,我使用以下代码初始化它:Entity framework EntityFramework 6.0 CreateDatabaseIfNoteExists代码在创建初始结构之前首先尝试迁移,entity-framework,Entity Framework,我有一个完美工作的EF6.0 DbContext,我使用以下代码初始化它: using (var db = new MyDbContext()) { db.Database.CreateIfNotExists(); } 我今天就开始在上面测试迁移。我所做的是:在包管理器窗口中运行以下命令: Enable-Migrations –EnableAutomaticMigrations 然后我修改了其中一个类,添加了一个publ
using (var db = new MyDbContext())
{
db.Database.CreateIfNotExists();
}
我今天就开始在上面测试迁移。我所做的是:在包管理器窗口中运行以下命令:
Enable-Migrations –EnableAutomaticMigrations
然后我修改了其中一个类,添加了一个public int TestField{get;set;}
属性并运行:
Add-Migration AddTestId
添加:另外,我创建了一个静态初始值设定项:
static MyDbContext()
{
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());
}
基本上发生的情况是:在创建数据库之后,
是:EF直接进行迁移,即使初始结构从未创建过,所以ALTER TABLE失败,因为还没有创建一个表来进行修改
我觉得我错过了一步。我做错了什么?我做了一些挖掘并想出了最终对我有用的程序。这必须在clean项目上完成,例如:文件夹
迁移
不应该已经存在。如果是-在源代码管理中执行回滚,并确保它不在磁盘上
另外,EF似乎正在使用服务器(或localdb)上的数据库,所以如果您使用它,从头开始重建模式可能是一个好主意。在我的例子中,删除它是有效的,因为我从零开始
首先要做的事情:
- 将我的db项目设置为启动项目(很重要,因为它从这里获取app.config)
- 在“包管理器”窗口中将我的db项目设置为默认值
- 检查MyDB项目中的app.config,确保存在有效的连接字符串,并且MyDbContext的默认构造函数正在使用它
- 删除该数据库
Enable-Migrations –EnableAutomaticMigrations
Add-Migration "Initial"
Update-Database
在
添加迁移“Initial”
之后,必须在Migrations文件夹中显示一个文件,其中包含public override void Up()
方法,该方法应创建完整的架构。如果不这样做,则会出现问题。使用CreateFile、ReadFile、WriteFile来存储数据库中的数据,而不是unsign函数SQL(这很复杂,也很难)。
对于c#使用StreamWriter、BinaryWriter、StreamReader、BinaryReader代替EntityFrameWork(这非常复杂和困难!)。
Perso I使用文件函数API存储数据。是否更新数据库?不确定,只是猜测一下也可以看到:@两次我没有提到我确实运行了更新数据库,但是由于单元测试中的数据库是从头创建的,所以我看不出有任何可能产生任何影响的原因
Enable-Migrations –EnableAutomaticMigrations
Add-Migration "Initial"
Update-Database