摘要:
我将从摘要开始,然后按照细节进行操作.对于我的项目,工作目录中的实时.sdf数据库文件中不会发生自动迁移.就好像.sdf文件不存在一样.相反,所有配置操作都在它在Program Files/Microsoft Visual Studio 10.0/Common7/IDE
目录中创建的新的空数据库文件上执行.如何让它在工作目录中的live .sdf数据库文件中运行?
细节:
该项目使用Visual Studio 2010 Ultimate中的Code First EF.该项目以EF 4.1开始,我刚刚将项目更新为EF 4.4.
数据库文件是SQL Server Compact Edition 4.0文件,该文件与可执行文件(即工作目录)位于同一目录中.一段时间以来一切都运行正常,但我想在DbContext中添加两个新的DbSet,因此向数据库文件添加两个新表.当我部署方案,以客户的新版本,我希望程序能够无缝刚才添加的两个新表到数据库中,并继续作为若无其事,其他表中留下不变的所有现存数据.
尝试1
按照http://msdn.microsoft.com/en-US/data/jj554735中描述的过程:
我在DbContext派生类中添加了两个新的DbSet.当我试图运行程序时,我得到以下异常: The model backing the 'DrillContext' context has changed since the database was created. Consider using Code First Migrations to update the database
.这是我期望发生的事情,因为我还没有启用迁移.
在包管理控制台中,我发出了命令:
Enable-Migrations -EnableAutomaticMigrations.
Run Code Online (Sandbox Code Playgroud)
系统创建了一个Migrations
包含Configuration.cs
文件的目录.
然后我跑了
Update-Database
Run Code Online (Sandbox Code Playgroud)
命令,并得到消息No pending code-based migrations
.我检查了工作目录中的实时数据库文件,它没有改变.但是,Program Files/Microsoft Visual Studio 10.0/Common7/IDE
目录中具有相同名称的新数据库文件具有相同的名称,并且是一个包含所有相应表的空数据库,包括与DbContext派生类中的两个新DbSets对应的两个表,以及一个名为的新表_MigrationHistory
,其中包含一个条目.实时.sdf文件保持不变,没有新表,也没有_MigrationHistory
表.
尝试2,使用"InitialMigration":
根据http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database/ …