Entity framework Can';t获取代码第一次自动迁移以在现有SQL Server CE数据库上工作
摘要: 我将从总结开始,然后是细节。对于我的项目,工作目录中的live.sdf数据库文件没有自动迁移。就好像那个.sdf文件不存在一样。相反,所有配置操作都在新的空数据库文件上执行,该文件在Entity framework Can';t获取代码第一次自动迁移以在现有SQL Server CE数据库上工作,entity-framework,entity-framework-4,entity-framework-4.1,Entity Framework,Entity Framework 4,Entity Framework 4.1,摘要: 我将从总结开始,然后是细节。对于我的项目,工作目录中的live.sdf数据库文件没有自动迁移。就好像那个.sdf文件不存在一样。相反,所有配置操作都在新的空数据库文件上执行,该文件在程序文件/Microsoft visualstudio 10.0/Common7/IDE目录中创建。如何让它在工作目录中的live.sdf数据库文件上工作 详细信息: 该项目使用Visual Studio 2010 Ultimate中的代码优先EF。该项目是从EF4.1开始的,我刚刚将项目更新为EF4.4 数
程序文件/Microsoft visualstudio 10.0/Common7/IDE
目录中创建。如何让它在工作目录中的live.sdf数据库文件上工作
详细信息:
该项目使用Visual Studio 2010 Ultimate中的代码优先EF。该项目是从EF4.1开始的,我刚刚将项目更新为EF4.4
数据库文件是SQL Server Compact Edition 4.0文件,与可执行文件位于同一目录(即工作目录)。现在一切都正常工作了一段时间,但我想向DbContext添加两个新的dbset,从而向数据库文件添加两个新表。当我向客户部署新版本的程序时,我希望该程序能够无缝地将两个新表添加到数据库中,并继续运行,就好像什么都没有发生一样,保留其他表中的所有现有数据
尝试1
按照中所述的流程:
我向DbContext派生类添加了两个新的dbset。当我尝试运行该程序时,出现以下异常:支持“DrillContext”上下文的模型自数据库创建以来已更改。考虑使用代码第一迁移来更新数据库
。这是我所期望的,因为我还没有启用迁移 在包管理控制台中,我随后发出命令:Enable-Migrations -EnableAutomaticMigrations.
系统创建了一个Enable-Migrations -EnableAutomaticMigrations
目录,其中包含Migrations
文件 然后我运行了Configuration.cs
命令,并获得消息Update-Database
。我检查了工作目录中的实时数据库文件,但没有更改。但是,在无挂起的基于代码的迁移
目录中有一个同名的新数据库文件,该文件名相同,是一个空数据库,包含所有适当的表,包括与DbContext派生类中的两个新数据库集对应的两个表,还有一个名为Program Files/Microsoft Visual Studio 10.0/Common7/IDE
的新表,其中只有一个条目。live.sdf文件保持不变,没有新表,也没有\u MigrationHistory
表 尝试2,使用“初始迁移”: 为了准备第二次尝试,我通过做3件事恢复了程序的原始状态(即,恢复到尝试迁移之前的状态)。我从DbContext派生类中删除了2个新的dbset。我删除了Migrations目录(以及附带的Configuration.cs文件),并删除了“../Common7/IDE”目录中无用的数据库文件(.sdf文件) 然后我执行命令:\u MigrationHistory
Enable-Migrations -EnableAutomaticMigrations.
它创建了Migrations目录和Configurations.cs文件 然后我执行了命令Enable-Migrations -EnableAutomaticMigrations
Add-Migration InitialMigration -IgnoreChanges
命令,该命令将一个Update-Database
文件添加到Migrations目录 然后,根据引用的网页上的说明,我修改了文件中的201208281905525\u InitialMigration.cs
方法,使Up
类如下所示:InitialMigration
然后我执行了命令public partial class InitialMigration : DbMigration { public override void Up() { Sql("DROP TABLE EdmMetadata"); } public override void Down() { } }
Add-Migration InitialMigration -IgnoreChanges
命令,并收到消息Update-Database
我检查了工作目录中的live数据库,发现数据库中确实有一个EdmMetadata表。然后我检查了指定的表不存在。
目录,发现在那里创建的新数据库没有该表 因此,所有“迁移”活动都发生在文件的../Common7/IDE
版本上,而不是工作目录中的实时数据库文件上 如何让它在现有的实时数据库文件上工作../Common7/IDE
谢谢,你好?!!有来自微软EF团队的人吗?你好有人知道答案吗?请检查连接字符串。你能提供DbContext类代码吗?你能给我们看一下类或声明数据库连接的配置文件吗?我自己在迁移方面有很多问题。它在本地环境中的工作方式不同,在主机中的工作方式也不同。一旦桌子不同步。。。你需要真正知道发生了什么。我用红门的一个叫做“SQL比较”的工具解决了我的问题。它非常酷而且直观。它将允许您创建您的表,并将它们与本地或主机匹配—您可以选择。请在这里看我的答案。而不是依靠移民,改变一个更好的工具-它免费2个星期,所以你至少可以让自己走出这个标准。DbContext