简体   繁体   中英

Entity Framework Code-First: Generate SQL script with 'Update-Database' produces XML error while parsing

Our project uses Entity Framework 6.0 with .NET 4.5, FAT-Client with Code-First approach.

We have about 20 migration-files (C# partial classes) generated automatically via the cmdlet Add-Migration in the Visual Studio Package Manager Console, and applied successfully via Update-Database .

Now, our client has an integration database that has around 10 migrations applied already, and we need to apply the remaining 10 migrations now. We used Update-Database -Script -SourceMigration:<migration10> in order to produce a SQL script for the remaining migrations. In this case – and also when using SourceMigration:$InitialDatabase – the following error is displayed:

[...]
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)

In the file that causes trouble, here 201609141622583_RemPerStaWe , absolutely nothing is done with anything that has a name of SoftwareAuftrag or alike. This stuff is done in previous migrations, and there, I also don't see any problem at all.

I tried attaching the debugger via code, but I don't know where to set a break point. The option to 'break when an exception occurs' doesn't seem to trigger a break in this case. Maybe another sub-process is started from the package manager.

I have no clue how I could break down the problem, and we lose a ton of time on this. Hopefully someone has a hint on this. ;)

UPDATE

I systematically deleted individual migration files until I found exactly 3 that in combination cause the error. But when I uncomment everything in up and down the error persists. When deleting the whole 3 migration files, the error is gone. How does that make sense? Problems with resource files? I don't know...

I normally use a command like:

Update-Database -Script 
       -SourceMigration:"201502201618119_Migrations17"   
       -TargetMigration:"201503031134340_Migrations18"

and then run the resultant script on the server. SourceMigration is the last entry in the __MigrationHistory table on the server.

The other 'trick' I use with migration problems is to delete the migration scripts that have not been applied to the server and then run the Add-migration again. It may be that there is a conflict between two of the migrations that is causing this. Do this rather then tweaking the individual scripts.

UPDATE: The timestamp in the above is not required. For example: SourceMigration:"Migrations17" is all that is required.

I understand from your post if I think right: you have applied the migration to the database by project management console or command tool than you have not need to migrate it again, automatically.

If I'm not mistaken, just cancel it at last step while publishing or running out

1- Open the file

Microsoft.NET.Sdk.Publish.TransformFiles.targets

2- Delete the related node

<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>

It is the case that i have faced while publishing Asp.Net core Web Api project to azure

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM