无法获取代码优先自动迁移以在现有SQL Server CE数据库上工作

时间:2012-08-28 21:52:01

标签: 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.

系统创建了一个Migrations目录,其中包含Configuration.cs个文件。

然后我跑了

Update-Database

命令,并收到消息No pending code-based migrations。我检查了工作目录中的实时数据库文件,它没有改变。但是,在Program Files/Microsoft Visual Studio 10.0/Common7/IDE目录中有一个具有相同名称的新数据库文件具有相同的名称,并且是一个包含所有相应表的空数据库,包括与DbContext中两个新DbSets对应的两个表-derived类,以及一个名为_MigrationHistory的新表,其中包含一个条目。实时.sdf文件保持不变,没有新表,没有_MigrationHistory表。

尝试2,它使用“InitialMigration”:

http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database/

为了准备第二次尝试,我通过做3件事恢复了程序的原始状态(即,我尝试迁移之前的状态)。我从DbContext派生类中删除了2个新的DbSet。我删除了Migrations目录(和随附的Configuration.cs文件),并删除了“... / Common7 / IDE”目录中无用的数据库文件(.sdf文件)。

然后我执行了命令:

Enable-Migrations -EnableAutomaticMigrations

创建了Migrations目录和Configurations.cs文件。

然后我执行了

Add-Migration InitialMigration -IgnoreChanges

命令,它将201208281905525_InitialMigration.cs文件添加到Migrations目录。

然后,根据引用网页上的说明,我修改了文件中的Up方法,以便InitialMigration类成为以下内容:

public partial class InitialMigration : DbMigration
{
    public override void Up()
    {
        Sql("DROP TABLE EdmMetadata");
    }

    public override void Down()
    {
    }
}

然后我执行了

Update-Database

命令,并收到消息The specified table does not exist.我检查了工作目录中的实时数据库,发现数据库中确实存在EdmMetadata表。然后我检查了.../Common7/IDE目录,发现在那里创建的新数据库没有表。

因此,所有“迁移”活动都发生在文件的.../Common7/IDE版本上,而不是工作目录中的实时数据库文件上。

如何让它在现有的实时数据库文件上运行?

谢谢,

0 个答案:

没有答案