【发布时间】:2016-05-31 13:31:14
【问题描述】:
编辑 2:
当我使用SQL Server 时不会发生这种情况。只有当我使用Oracle 时才会发生这种情况。有人建议对此进行调试或提供内部异常。然而,由于这个异常发生在脚手架期间,我无法得到内部异常。另外,我不确定我们是否可以调试脚手架过程。如果有人知道怎么做,请告诉我。
错误
运行所选代码生成器时出错:
'调用目标抛出异常'
好的,首先,thesearchresultsforthiserrorerrorseemstoreturnmany@987654returnmany@987654。
因此我了解到这个错误并不是在 EF 6 中创建 Controller scaffolding 所独有的。
但我的情况是,当我即将在 VS2013 中使用 EF 6 创建Controller Scaffolding 时,我创建了MVC web application。
我使用的选项是:
MVC 5 Controller with views, using Entity Framework
我使用Oracle Database 和Oracle.ManagedDataAccess namespace。我发现的一些相关帖子如下:
- Exception has been thrown by the target of an invocation thrown when scaffolding a controller
- EF Power Tools Beta 2 - exception has been thrown by the target of an invocation
- Exception has been thrown by the target of an invocation- while creating the controller
- Scaffolding controller doesn't work with visual studio 2013 update 2
但他们都没有谈论Oracle DB的具体案例
但由于他们一般都在谈论任何DB,我还是尝试了他们的一些解决方案,包括:
-
删除所有
sections、connectionStrings和providers,使它们中的每一个都只包含单个项目:<configSections> <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </configSections> <connectionStrings> <add name="EmployeeContext" connectionString="metadata=res://*/Models.EmployeeDataModel.csdl|res://*/Models.EmployeeDataModel.ssdl|res://*/Models.EmployeeDataModel.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="DATA SOURCE=VSDB;PASSWORD=mypassword;USER ID=myuser"" providerName="System.Data.EntityClient" /> </connectionStrings> <providers> <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </providers> -
将
Context中的DbSet更改为IDBSetpublic virtual DbSet<Employee> Employees1 { get; set; } -
使用
VS2013 with update 5。 -
升级到
Entity Framework 6.1.3 -
将
defaultConnectionFactory更改为:<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> </entityFramework>到
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> -
将
OnModelCreating事件处理程序从:protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); }到
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.HasDefaultSchema("myschema"); }
但这些都不起作用。我仍然得到同样的错误。我什至将它们全部一起尝试,但问题仍然存在。
我不知道在这种情况下应该做什么。有什么想法吗?
编辑:
我也很高兴知道是否有人可以告诉我如何“调试”我的案例的脚手架出了什么问题,以便为我的案例找到正确的解决方案。我是网络编程和实体框架的新手,真的不知道导致错误的幕后发生了什么。
编辑 2:
我已尝试按照评论中的Steve 和chat 中的Squiggle 的建议通过SQL Server 重做脚手架来隔离问题,但我遇到了no 问题全部。因此,问题一定与 Oracle DB 设置或(可能)与我使用的 ODP.Net 工具有关 Oracle.ManagedDataAccess - EF 是否支持。
【问题讨论】:
-
该错误是否有任何其他消息或内部异常?调用的目标非常广泛(如您所见)。
-
@Steve 问题是,我无法调试内部异常,因为它不是代码,而是由
MVC 5 Controller with views, using Entity Framework创建控制器获得的脚手架。如果有什么方法可以调试脚手架的内部异常,我也想知道.. -
那么当您使用 Visual Studio 工具创建控制器时,您会得到它吗?嗯...很明显的问题,但是您是否在新解决方案或不同的数据库访问类型中尝试过?
-
@Steve "当你使用 Visual Studio 工具创建控制器时" 是的,正如你所说......如果你知道如何调试这种情况,我想知道如何。我是按照 youtube 视频系列中的讲座进行的:至少在视频中,youtube.com/… 使用
SqlClient默认数据库时没有问题。至于使用Oracle.ManagedDataAccess,我必须做一些配置才能使其工作,现在我陷入了这个问题 - 不确定我遗漏了什么配置。 -
也许您可以尝试注释掉数据上下文类中的一些代码,例如dbset 属性并检查错误是否在某个时候消失。
标签: c# asp.net-mvc oracle entity-framework scaffolding