如何调试Entity Framework迁移LoaderExceptions?

时间:2013-04-02 20:58:16

标签: c# entity-framework powershell ef-migrations

我正在尝试在其他计算机上运行的Entity Framework 5项目中运行update-database

我下载了代码,重建了项目,当我运行update-database时,我收到如下错误:

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
   at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.RuntimeModule.GetTypes()
   at System.Reflection.Assembly.GetTypes()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindType[TBase](String typeName, Func`2 filter, Func`2 noType, Func`3 multipleTypes, Func`3 noTypeWithName, Func`3 multipleTypesWithName)
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindConfiguration()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

我认为发生此错误是因为我的环境中缺少某些程序集,或者可能是因为在GAC中发现了不兼容的程序集。但是知道这种类型的whitout无法加载,我处于黑暗状态,所以这是一个非常难以调试的问题。

如何找出无法加载的类型或程序集?消息说“检索LoaderExceptions属性以获取更多信息”,但是如果在包管理器控制台中运行迁移,而不是在我自己的代码中,我该怎么做呢?

在控制台中键入$Error[0].Exception会显示异常消息,但如何列出其他属性?

1 个答案:

答案 0 :(得分:3)

我不确定这是否可以帮助你,但只是提出一个想法......

您可以尝试从代码中运行迁移 - 在那里您可能会遇到异常处理。例如

EF Code First DbMigration without nuget

DbMigrator migrator = new DbMigrator(new YourConfiguration());
migrator.Update(); // or update specific migrations..    

您也可以通过配置转换 - 甚至在没有重新编译的情况下转换(用于生产) - 如果您启用了日志记录/跟踪,您可能会从中获得一些错误...

    <contexts>
        <context type="YourNS.YourContext, YourAssembly">
            <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[YourNS.YourContext, YourAssembly], [YourNS.YourConfiguration, YourAssembly]], EntityFramework" />
        </context>
    </contexts>

</entityFramework>