我有一个使用SQLCE4和Entity Framework的应用程序。该应用程序有一些尚未应用于特定用户的迁移。不知何故,即使EF表示迁移尚未应用,数据库也有一列。因此,当我尝试运行应用程序时,出现错误A column ID occurred more than once in the specification.
我查看了数据库sdf
文件,找到了已经存在的列,并将其与尝试添加它的行相关联。
AddColumn("dbo.ReceiveElements", "PackingSlipID", c => c.String(maxLength: 4000));.
数据库已经有了PackingSlipID
列。我在这里玩一个巨大的猜谜游戏,并认为用户可能在数据库更新/迁移过程中关闭了应用程序。 (不确定这是否可行。)
问题
如果我删除上面的行,更新工作正常,数据库运行正常。但是,我需要将其留在那里,因为它会创建一个正确的更新方案。我尝试将代码包装在try / catch中,问题仍然存在。如何防止错误导致迁移的其余部分瘫痪?在调用" AddColumn"之前,我会考虑一种检查列是否存在的方法。虽然我不想修改迁移代码。
数据库设置为使用
自动迁移Database.SetInitializer<Data.DataManager>(new MigrateDatabaseToLatestVersion<Data.DataManager, Migrations.Configuration>());