ErikEJ / EFCorePowerTools

Entity Framework Core Power Tools - reverse engineering, migrations and model visualization in Visual Studio & CLI
MIT License
2.13k stars 294 forks source link

Exception thrown when reverse engineering to EF Core 6 on version 2.5.1273 of extension #1667

Closed dradermaker closed 1 year ago

dradermaker commented 1 year ago

Exception thrown when trying to reverse engineer from a database project or DACPAC and targeting EF Core 6. The error was not thrown prior to version 2.5.1273 of the extension (everything worked in 2.5.1258).

If this can't be reproduced or if you need anymore details on the environment this occurs on, feel free to let me know.

Steps to reproduce

Simply reverse engineer a database project with EF Core 6 as the target using version 2.5.1273 of the extension.

Technical details

Output from extensions

System.InvalidOperationException: Table list error: System.TypeInitializationException: The type initializer for 'Microsoft.SqlServer.Dac.DacPackage' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Microsoft.SqlServer.Dac.DacServices' threw an exception. ---> System.TypeInitializationException: The type initializer for 'SqlSchemaModelStaticState' threw an exception. ---> System.TypeLoadException: Could not load type 'Microsoft.Data.SqlClient.Server.Format' from assembly 'Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken='. at void Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchemaModel.RegisterImplementationForSqlModelImpl(ModelSchema storeSchema) at void Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchemaModel+SqlSchemaModelStaticState.RegisterModelSchema() at static Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchemaModel+SqlSchemaModelStaticState() --- End of inner exception stack trace --- at ModelSchema Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchemaModel+SqlSchemaModelStaticState.get_ModelSchema() at ModelSchema Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchemaModel.get_ModelSchema() at void Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchemaModel.InitializeModelSchema() at void Microsoft.SqlServer.Dac.DacServices.Initialize() at static Microsoft.SqlServer.Dac.DacServices() --- End of inner exception stack trace --- at void Microsoft.SqlServer.Dac.DacServices.Initialize() at static Microsoft.SqlServer.Dac.DacPackage() --- End of inner exception stack trace --- at DataSchemaModel Microsoft.SqlServer.Dac.DacPackage.DeserializePackage(SqlPackage package, DacSchemaModelStorageType modelStorageType, ErrorManager errorManager, out DataSchemaModelHeader header) at DataSchemaModel Microsoft.SqlServer.Dac.Model.SqlSchemaModelLoader.LoadModel(IPackageSource packageSource, ErrorManager errorManager, out DataSchemaModelHeader modelHeader) at void Microsoft.SqlServer.Dac.Model.SqlSchemaModelLoader.LoadFromDacpac(IPackageSource packageSource, string fileNameIfPresent) at new Microsoft.SqlServer.Dac.Model.SqlSchemaModelLoader(string fileName, DacSchemaModelStorageType modelStorageType) at new Microsoft.SqlServer.Dac.Model.TSqlModel(string fileName, ModelLoadOptions options, CancellationToken cancelToken) at DatabaseModel ErikEJ.EntityFrameworkCore.SqlServer.Scaffolding.SqlServerDacpacDatabaseModelFactory.Create(string connectionString, DatabaseModelFactoryOptions options) in C:/Code/Github/EFCorePowerTools/src/GUI/ErikEJ.EntityFrameworkCore.SqlServer.Dacpac/Scaffolding/SqlServerDacpacDatabaseModelFactory.cs:line 72 at List RevEng.Core.TableListBuilder.GetTableDefinitions() in C:/Code/Github/EFCorePowerTools/src/GUI/RevEng.Core/TableListBuilder.cs:line 122 at List RevEng.Core.TableListBuilder.GetTableModels() in C:/Code/Github/EFCorePowerTools/src/GUI/RevEng.Core/TableListBuilder.cs:line 43 at async Task EfReveng.Program.Main(string[] args) in C:/Code/Github/EFCorePowerTools/src/GUI/efreveng/Program.cs:line 41

at List EFCorePowerTools.Handlers.ReverseEngineer.ResultDeserializer.BuildTableResult(string output) at async Task<List> EFCorePowerTools.Handlers.ReverseEngineer.EfRevEngLauncher.GetTablesInternalAsync(string arguments) at async Task<List> EFCorePowerTools.Handlers.ReverseEngineer.EfRevEngLauncher.GetTablesAsync(string connectionString, DatabaseType databaseType, SchemaInfo[] schemas, bool mergeDacpacs) at async Task<List> EFCorePowerTools.Handlers.ReverseEngineer.TableListBuilder.GetTableDefinitionsAsync(CodeGenerationMode codeGenerationMode) at async Task<List> EFCorePowerTools.Handlers.ReverseEngineer.ReverseEngineerHandler.GetDacpacTablesAsync(string dacpacPath, CodeGenerationMode codeGenerationMode) at async Task EFCorePowerTools.Handlers.ReverseEngineer.ReverseEngineerHandler.LoadDataBaseObjectsAsync(ReverseEngineerOptions options, DatabaseConnectionModel dbInfo, Tuple<List, string> namingOptionsAndPath) at async Task EFCorePowerTools.Handlers.ReverseEngineer.ReverseEngineerHandler.ReverseEngineerCodeFirstAsync(Project project, string optionsPath, bool onlyGenerate, bool fromSqlProj)

vnc4567 commented 1 year ago

I have the same issue, Microsoft.Data.SqlClient doesn't have the type Microsoft.Data.SqlClient.Server.Format anymore.

I downgrade the version of EF power tool extension

ErikEJ commented 1 year ago

I have identified the issue and is currently testing the fix.

ErikEJ commented 1 year ago

I implemented a fix for this in the latest daily build, would be grateful if you could try it out.

vnc4567 commented 1 year ago

It works now with on version 2.5.1277

ErikEJ commented 1 year ago

@vnc4567 Great, I am uploading that to the MarketPlace now

dradermaker commented 1 year ago

Works on my side too. Thanks a lot @ErikEJ ! You're a legend !

ErikEJ commented 1 year ago

@dradermaker @vnc4567 Thanks for reporting this!

I would be very grateful for a rating or review on Visual Studio Marketplace