Dan*_*lis 5 entity-framework entity-framework-4 entity-framework-4.1
摘要:
我将从摘要开始,然后按照细节进行操作.对于我的项目,工作目录中的实时.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/
为了准备第二次尝试,我通过做三件事来恢复程序的原始状态(即,到我尝试迁移之前的状态).我从DbContext派生类中删除了2个新的DbSet.我删除了Migrations目录(和随附的Configuration.cs文件),并删除了".../Common7/IDE"目录中的无用数据库文件(.sdf文件).
然后我执行了命令:
Enable-Migrations -EnableAutomaticMigrations
Run Code Online (Sandbox Code Playgroud)
它创建了Migrations目录和Configurations.cs文件.
然后我执行了
Add-Migration InitialMigration -IgnoreChanges
Run Code Online (Sandbox Code Playgroud)
command,它将201208281905525_InitialMigration.cs
文件添加到Migrations目录.
然后,根据引用的网页上的说明,我修改Up
了文件中的方法,以便InitialMigration
该类成为以下内容:
public partial class InitialMigration : DbMigration
{
public override void Up()
{
Sql("DROP TABLE EdmMetadata");
}
public override void Down()
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后我执行了
Update-Database
Run Code Online (Sandbox Code Playgroud)
命令,并得到消息The specified table does not exist.
我检查了工作目录中的实时数据库,发现数据库中确实有一个EdmMetadata表.然后我检查了.../Common7/IDE
目录,发现在那里创建的新数据库没有该表.
因此,所有"迁移"活动都发生在.../Common7/IDE
文件版本上,而不是发生在工作目录中的实时数据库文件中.
如何让它在现有的实时数据库文件上运行?
谢谢,
归档时间: |
|
查看次数: |
1786 次 |
最近记录: |