Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-如何忽略自动迁移中的错误_C#_Sql_Entity Framework_Ef Code First_Entity Framework Migrations - Fatal编程技术网

C# 实体框架-如何忽略自动迁移中的错误

C# 实体框架-如何忽略自动迁移中的错误,c#,sql,entity-framework,ef-code-first,entity-framework-migrations,C#,Sql,Entity Framework,Ef Code First,Entity Framework Migrations,我有一个使用SQLCE4和实体框架的应用程序。应用程序有一些迁移尚未应用于特定用户。不知怎的,数据库有一列,即使EF说迁移还没有应用。因此,当我尝试运行该应用程序时,我得到了一个错误列ID在规范中多次出现。 我查看了数据库sdf文件,找到了已经存在的列,并将它与试图添加它的行关联起来 AddColumn("dbo.ReceiveElements", "PackingSlipID", c => c.String(maxLength: 4000));. 数据库不知何故已经有了列Packing

我有一个使用SQLCE4和实体框架的应用程序。应用程序有一些迁移尚未应用于特定用户。不知怎的,数据库有一列,即使EF说迁移还没有应用。因此,当我尝试运行该应用程序时,我得到了一个错误
列ID在规范中多次出现。

我查看了数据库
sdf
文件,找到了已经存在的列,并将它与试图添加它的行关联起来

AddColumn("dbo.ReceiveElements", "PackingSlipID", c => c.String(maxLength: 4000));.
数据库不知何故已经有了列
PackingSlipID
。我在这里玩一个巨大的猜测游戏,并认为可能是用户在数据库更新/迁移过程中关闭了应用程序。(不确定这是否可行。)

问题

如果我删除上面的行,更新工作正常,数据库运行正常。但是,我需要把这一行留在那里,因为它创建了一个适当的更新场景。我试图用try/catch包装代码,但问题仍然存在。如何防止错误影响迁移的其余部分?在调用“AddColumn”之前,我会选择一种检查列是否存在的方法,尽管我不希望修改迁移代码

数据库设置为使用自动迁移

Database.SetInitializer<Data.DataManager>(new MigrateDatabaseToLatestVersion<Data.DataManager, Migrations.Configuration>());
Database.SetInitializer(新的MigrateDatabaseToLatestVersion());

需要注意以下几点:(1)类本身可能与迁移所说的内容相冲突。(2) 您可以非常轻松地回滚迁移。把东西复制到沙箱里,然后把东西滚回去。(3) 今天就按照您的意愿重新开始上课,不要迁移(历史上)。您应该知道如何删除迁移表中的行,或者根据迁移表中的其他内容完全删除该表。。。(3) 听起来像是我首先要做的…@PatTrainor这是一个部署在许多手持设备上的应用程序。除了一台设备外,该应用程序可以在每台设备上运行。所以迁移工作正常,类设置正确。那么您是说客户端本身不同步,因为它有一个本地副本,而全局更新不适用于这一个?如果是这样,那么是什么阻止了重新安装(当然是导出以保留数据,然后在更新/重新安装后导入)?听起来像是集中执行EF迁移,然后应用程序处理模式更改,它们自己的程序集像往常一样升级。如果是这样,客户端上的本地数据库就不同步了,对吗?是什么阻止您在客户端上重建它?@PatTrainor我可以手动执行或重新安装应用程序,但这里的首选项是不要丢失设备拥有的本地数据,并避免为此问题拨打支持电话。我可以考虑自动导出和重新导入数据。(第1页,共2页)嗯。。您能否集中实施一种类型的数据恢复,以便客户端向您发送(唯一的)数据?然后你可以让他们重新安装(或远程启动)(我对你的应用程序/架构一无所知)…你可以重新导入/发送到应用程序,而客户端不必处理它…这使得你很难远程访问客户端。我现在正在编写一个类似的客户端/服务器应用程序,我一直在考虑如何处理这些情况。