实体框架代码优先:使用'Update-Database'生成SQL脚本在解析时会产生XML错误

dom*_*min 3 c# entity-framework ef-code-first ef-migrations

我们的项目使用Entity Framework 6.0和.NET 4.5,FAT-Client和Code-First方法.

我们有大约20个迁移文件(C#部分类)通过Add-MigrationVisual Studio包管理器控制台中的cmdlet自动生成,并通过成功应用Update-Database.

现在,我们的客户端有一个集成数据库,已经应用了大约10个迁移,我们现在需要应用剩余的10个迁移.我们使用Update-Database -Script -SourceMigration:<migration10>它来为剩余的迁移生成SQL脚本.在这种情况下 - 以及使用时SourceMigration:$InitialDatabase- 会显示以下错误:

[...]
Applying explicit migration: 201609141617112_HostAufbauIdentifier.
Applying explicit migration: 201609141622583_RemPerStaWe.
System.Xml.XmlException: 'SoftwareAuftrag_Auftrag' is an unexpected token. Expecting white space. Line 1943, position 92.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ThrowExpectingWhitespace(Int32 pos)
   at System.Xml.XmlTextReaderImpl.ParseAttributes()
   at System.Xml.XmlTextReaderImpl.ParseElement()
   at System.Xml.XmlTextReaderImpl.ParseElementContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
   at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
   at System.Xml.Linq.XDocument.Load(Stream stream, LoadOptions options)
   at System.Data.Entity.Migrations.Edm.ModelCompressor.Decompress(Byte[] bytes)
   at System.Data.Entity.Migrations.DbMigration.GetModel(Func`2 modelAccessor)
   at System.Data.Entity.Migrations.DbMigration.GetTargetModel()
   at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.ScriptUpdate(String sourceMigration, String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdate(String sourceMigration, String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Run Code Online (Sandbox Code Playgroud)

在导致麻烦的文件中,这里201609141622583_RemPerStaWe绝对没有任何名称SoftwareAuftrag或相似的东西.这些东西在以前的迁移中完成,在那里,我也没有看到任何问题.

我尝试通过代码附加调试器,但我不知道在哪里设置断点.在发生异常时"中断"的选项似乎不会在这种情况下触发中断.也许从包管理器启动另一个子流程.

我不知道如何解决这个问题,我们在这方面会失去很多时间.希望有人对此有所暗示.;)

UPDATE

我系统地删除了单个迁移文件,直到我发现确切地说3组合导致错误.但是当我取消注释所有内容up并且down错误仍然存​​在时.删除整个3个迁移文件时,错误消失了.这有什么意义?资源文件有问题吗?我不知道...

Pet*_*ith 12

我通常使用如下命令:

Update-Database -Script 
       -SourceMigration:"201502201618119_Migrations17"   
       -TargetMigration:"201503031134340_Migrations18"
Run Code Online (Sandbox Code Playgroud)

然后在服务器上运行生成的脚本.SourceMigration__MigrationHistory服务器上表中的最后一个条目.

我用于迁移问题的另一个"技巧"是删除尚未应用于服务器的迁移脚本,然后Add-migration再次运行.可能是导致此问题的两次迁移之间存在冲突.这样做而不是调整各个脚本.

更新:上述时间戳不是必需的.例如: SourceMigration:"Migrations17"完全是必需的.