Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 实体框架代码优先:使用';更新数据库';解析时产生XML错误_C#_Entity Framework_Ef Code First_Entity Framework Migrations - Fatal编程技术网

C# 实体框架代码优先:使用';更新数据库';解析时产生XML错误

C# 实体框架代码优先:使用';更新数据库';解析时产生XML错误,c#,entity-framework,ef-code-first,entity-framework-migrations,C#,Entity Framework,Ef Code First,Entity Framework Migrations,我们的项目使用EntityFramework6.0和.NET4.5,胖客户端采用代码优先的方法 我们在Visual Studio软件包管理器控制台中通过cmdlet添加迁移自动生成了大约20个迁移文件(C#分部类),并通过更新数据库成功应用了这些文件 现在,我们的客户机有一个集成数据库,它已经应用了大约10次迁移,我们现在需要应用剩余的10次迁移。我们使用updatedatabase-Script-SourceMigration:为剩余的迁移生成一个SQL脚本。在这种情况下,以及使用Source

我们的项目使用EntityFramework6.0和.NET4.5,胖客户端采用代码优先的方法

我们在Visual Studio软件包管理器控制台中通过cmdlet
添加迁移
自动生成了大约20个迁移文件(C#分部类),并通过
更新数据库
成功应用了这些文件

现在,我们的客户机有一个集成数据库,它已经应用了大约10次迁移,我们现在需要应用剩余的10次迁移。我们使用
updatedatabase-Script-SourceMigration:
为剩余的迁移生成一个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)
[…]
应用显式迁移:201609141617112_hostaufbaudidentifier。
应用显式迁移:201609141622583_RemPerStaWe。
System.Xml.XmlException:“SoftwareAuftrag_Auftrag”是意外标记。需要空白。第1943行,位置92。
位于System.Xml.XmlTextReaderImpl.Throw(异常e)
在System.Xml.XmlTextReaderImpl.Throw(String res,String arg)
在System.Xml.XmlTextReaderImpl.ThroweExpectingWhitespace(Int32 pos)中
位于System.Xml.XmlTextReaderImpl.ParseAttributes()处
位于System.Xml.XmlTextReaderImpl.ParseElement()处
位于System.Xml.XmlTextReaderImpl.ParseElementContent()处
位于System.Xml.XmlTextReaderImpl.Read()处
位于System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
位于System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r,LoadOptions o)
位于System.Xml.Linq.XDocument.Load(XmlReader阅读器,LoadOptions)
位于System.Xml.Linq.XDocument.Load(Stream-Stream,LoadOptions)
在System.Data.Entity.Migrations.Edm.ModelCompressor.Decompresse(字节[]字节)处
位于System.Data.Entity.Migrations.Dmbmigration.GetModel(Func`2 modelAccessor)
位于System.Data.Entity.Migrations.DbMigration.GetTargetModel()处
位于System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration,DbMigration lastMigration)
位于System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration,DbMigration lastMigration)
位于System.Data.Entity.Migrations.Infrastructure.MigratorBase.ApplyMigration(DbMigration migration,DbMigration lastMigration)
位于System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations,String targetMigrationId,String lastMigrationId)
位于System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations,字符串targetMigrationId,字符串lastMigrationId)
位于System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable`1 pendingMigrations,字符串targetMigrationId,字符串lastMigrationId)
位于System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.ScriptUpdate(字符串sourceMigration,字符串targetMigration)
位于System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.Run()处
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
位于System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner)
位于System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdate(String sourceMigration、String targetMigration、Boolean force)
在System.Data.Entity.Migrations.UpdateDatabaseCommand.c__DisplayClass2.b__0()中
位于System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)
在引起问题的文件中,这里是
201609141622583_RemPerStaWe
,对于任何名称为
SoftwareAuftrag
或类似名称的文件,绝对不做任何处理。这是在以前的迁移中完成的,在那里,我也看不到任何问题

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

我不知道如何解决这个问题,我们在这个问题上浪费了很多时间。希望有人对此有所暗示

更新
我系统地删除了单个迁移文件,直到我发现有3个文件组合导致了错误。但是当我取消注释
up
down
中的所有内容时,错误仍然存在。删除全部3个迁移文件时,错误消失。这有什么意义?资源文件有问题吗?我不知道…

我通常使用如下命令:

Update-Database -Script 
       -SourceMigration:"201502201618119_Migrations17"   
       -TargetMigration:"201503031134340_Migrations18"
然后在服务器上运行生成的脚本
SourceMigration
是服务器上
\uu MigrationHistory
表中的最后一项

对于迁移问题,我使用的另一个“技巧”是删除尚未应用于服务器的迁移脚本,然后再次运行
addmigration
。这可能是由于两次迁移之间存在冲突造成的。这样做,而不是调整单个脚本

更新: 上面的时间戳不是必需的。例如:
SourceMigration:“Migrations17”
是所需的全部。

如果我认为正确,我从您的帖子中了解到:您已通过项目管理控制台或命令工具将迁移应用到数据库,而无需再次自动迁移

若我并没有弄错的话,在发布或用完时,在最后一步取消它

1-打开文件

<GenerateEFSQLScripts
  Condition="'$(_IsAspNetCoreProject)' == 'true' And 

'$(IsGenerateEFSQLScriptsDisabled)' != 'true' And @(EfMigrations) != ''"
      ProjectDirectory="$(MSBuildProjectDirectory)"
      EFPublishDirectory="$(_EFPublishDirectory)"
      EFSQLScriptsFolderName="$(EFSQLScriptsFolderName)"
      EFMigrations="@(EFMigrations)"
      EFMigrationsAdditionalArgs="$(EFMigrationsAdditionalArgs)">
      <Output TaskParameter="EFSQLScripts" ItemName="_EFSQLScripts" />
    </GenerateEFSQLScripts>
Microsoft.NET.Sdk.Publish.TransformFiles.targets

2-删除相关节点

<GenerateEFSQLScripts
  Condition="'$(_IsAspNetCoreProject)' == 'true' And 

'$(IsGenerateEFSQLScriptsDisabled)' != 'true' And @(EfMigrations) != ''"
      ProjectDirectory="$(MSBuildProjectDirectory)"
      EFPublishDirectory="$(_EFPublishDirectory)"
      EFSQLScriptsFolderName="$(EFSQLScriptsFolderName)"
      EFMigrations="@(EFMigrations)"
      EFMigrationsAdditionalArgs="$(EFMigrationsAdditionalArgs)">
      <Output TaskParameter="EFSQLScripts" ItemName="_EFSQLScripts" />
    </GenerateEFSQLScripts>


这是我在将Asp.Net核心Web Api发布到azure时遇到的情况。问题是,由于提到的XML错误,没有生成脚本。我不知道这到底是什么XML。