我在VS 2013 Professional中创建了一个MVC 5应用程序,然后首先使用EF 6.1代码与SQL Server Express上的现有数据库。当我尝试创建视图时,我正在使用“新建脚手架项目...”,然后选择“带视图的MVC 5控制器,使用实体框架。”我选择模型和上下文类,然后单击“确定”。然后出现以下错误消息,并且不创建任何代码。我已经卸载了EF Power Tools并出现了同样的错误。
错误
运行所选代码生成器时出错:'调用目标已抛出异常。'
我还尝试卸载/重新安装VS 2013和SQL Server,没有任何更改。
关于什么可能导致此错误的任何其他想法?
我也有这个问题,我通过调用我的数据库上下文中的base.onModelCreating解决了这个问题
base.OnModelCreating(modelBuilder);
没有运气,我尝试了上述大部分内容。
最终起作用的是:
然后一切都恢复了工作,减去了3个小时的开发时间。
似乎与动态创建的连接字符串和模型有关。会对可能发生的事情有所了解。
在我的例子中,我用web.config中的连接字符串解决了这个问题。
以前的问题我有qazxsw poi
我不知道为什么,但vs无法连接到数据库并失败。
改变之后
<connectionStrings configSource="Configs\ConnectionString.config"/>
它的工作原理
我的解决方案就像将Web Config中的连接字符串名称更改为DefaultConnection一样简单。即使我的dbContext有另一个名字!
花了我2个小时才发现这个废话!
这似乎是通过<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
连接设置/不一致条目的问题。要解决此问题,请按以下步骤操作:
删除与连接相关的信息(从Web.config
启动<connectionStrings>并删除到目前为止生成的模型。
现在生成模型,它将在Web.config
文件中添加新的连接条目。生成模型后,构建解决方案然后开始执行Scaffolding控制。它会工作。
我也使用VS 2015遇到了这个问题。我在这里尝试了所有其他解决方案都没有成功。事实证明,我的连接字符串(虽然形成MS告诉我们如何形成它)需要双\才能正常工作。
这是不起作用的:
Web.config
这是我改变它以使代码生成器工作:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />
注意V11.0前面的双\字符和数据库名称。
希望这能节省一些时间。
UPDATE
这使代码生成工作,但随后应用程序将无法运行,因为\ V11.0不是有效的连接字符串。这看起来像MS在解析连接字符串时在代码生成中存在错误。在运行代码生成以使应用程序再次运行后,我不得不将其更改为单个\。
更新2
在我的合作伙伴进行了一些挖掘之后,我们发现真正搞砸了代码生成的事实是我们改变了“初始目录”字段。当项目由向导创建时,它会自动将初始目录设置为aspnet--。然后我们将此初始目录字段更改为DB。这对于运行应用程序非常有用。它可以很好地进入数据库。但由于某种原因,这搞砸了代码脚手架的生成。通过将初始目录恢复到之前的状态(aspnet--,脚手架再次开始工作(不需要\ V11.0)。
希望将来可以帮助某人。
检查实体之间的关系或其他模型设计问题。对于测试,创建没有关系的新类模型,并使用Scaffold生成控制器和视图。适合我。
当我对我的模型进行一些更改时,我得到了同样的错误。只有我能够解决的方法是1)停止/杀死进程2)清洁解决方案并重建解决方案
如果您有任何机会,请遵循Tom Dykstra的“使用MVC 5进行实体框架6代码入门”。
我加倍检查一切,我的连接字符串是完美的。我没有意识到的是我复制了另一套我已经拥有的appSettings。往下看
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />
我的建议是检查每一寸Web.config,我确信这是罪魁祸首。
在我的例子中,NuGet将以下提供程序添加到web.config:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
当我将提供者更改为
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact"/>
它解决了这个问题(花了我大约5个小时来解决它:-()
我有同样的错误。以下是我为解决问题所做的两件事:
在我的情况下,我将连接字符串从Web.config中移出
<connectionStrings configSource="ConnectionStrings.config"/>
当我尝试脚手架时,我开始收到错误。
运行所选代码生成器时出错:'调用目标已抛出异常。'
将我的连接字符串移回Web.config解决了我的问题。
这是(我99%肯定)连接字符串问题。一旦我在Web.Config中解决了问题,错误就消失了。我首先使用数据库,在另一个项目中,一旦我将数据库中的第一个连接字符串从App.config复制到web.config(使用相同的名称),它按预期工作。
使用Visual Studio 2015
升级的mysql服务器,在此过程中,Visual Studio的mysql从6.9.7升级到6.9.8
在我的Web配置中,仍然存在对旧版6.9.7的引用
这是我的git diff解决了这个问题:
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
我意识到这个问题现在已经过时了,但我想我会发布什么解决了我的问题以防以后帮助任何人。就我而言,它是其他答案中提到的几件事的组合。为了确保我的连接字符串,我有......
执行此操作后,我无法再创建控制器。要解决这个问题,我不得不......
- <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.7.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>
+ <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.8.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>
大家。我知道我有点晚了,但我认为分享我对这个问题的经验仍然有效。
我在两个项目中遇到了这个消息,在这两种情况下,问题都在于连接字符串。
在第一种情况下,它是“InitialCatalog”而不是“Initial Catalog”(分开)。
在第二种情况下,服务器名称(数据源参数)是错误的。
我希望它有所帮助。
最好的祝福。
出于某种原因,当我在web.config中的public contextClass() : base("name=connectionStringName") { }
之间评论oracle.manageddataaccess.client部分时,它有效。 (VS 2015和ODT 12)
<configSections>
在我的情况下,问题是由外部应用程序设置文件引起的:
<configSections>
<section name="entityFramework" type" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<!--<section name="oracle.manageddataaccess.client" />-->
</configSections>
将应用程序设置重新放回web.config文件解决了该问题。
<appSettings configSource="appSettings.config" />
我有这个:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
我不得不删掉两个并放回去。
<appSettings configSource="App_Config\Server\AppSettings.config" />
<connectionStrings configSource="bin\Connections.config" />
删除仍然导致相同的错误。
使用:VS 2015 Community Edition和EF 6.1.3还实现:种子方法,具有个性化类,并在web.config文件中配置,以便在每次模型更改时运行。这似乎与web.config文件中的一些错误配置有关,在我的情况下,就像我在本文中看到的文件的其他部分的一些情况,该部分重复了不同的内容,但它重复了主标记当然。在该部分上,该部分不合适的情况也是在尝试使用脚手架时导致相同行为和狭窄信息的原因。
您的上下文类可能会抛出异常。
我正在阅读“C#6.0和.NET 4.6 Framework”一书,数据访问层部分的最后一个练习之一就是添加日志记录。好吧,我想这会炸毁脚手架巫师。可能没有定义<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
或sqllog.txt
的文件权限......谁知道。当我评论所有这些东西时,它再次起作用。
HttpRuntime
EF 6.1不支持脚手架模板使用EF 5 Chares
这解决了我的问题,
将throwIfV1Schema: false
添加到DbContext
的基地
如此:
public MyDbContext() : base("ConectionStringName", throwIfV1Schema: false) { }
使用带有'ASP.NET MVC5并使用实体框架的视图'的脚手架创建控制器时,我遇到了同样的问题
问题是因为我在web.config中的<connectionStrings>
之前提供了<configSections>
标记。在<connectionStrings>
解决问题后设置<configSections>
。
我想,虽然脚手架,ASP.NET MVC想首先解析实体框架,然后是连接字符串,因为我之前提供了连接字符串,以便在解析Entity Framework版本之后找不到连接字符串所以它抛出调用问题。
迟回复;但是,我发布这个答案,希望有人可以用这个答案来解决他们的问题。
出于某种原因,如果您的程序无法读取connectionString信息(来自web.config或其他方式),那么将抛出此错误。
确保正确检索有效的connectionString信息,没有任何问题。
我有相同的错误消息。我尝试从添加控制器对话框添加一个新的Data context class
,然后我得到一个不同的错误:
There was an error running the selected code generator:
'Sections must only appear once per config file. See the help topic
<locations> for exceptions.
事实证明,我的web.config文件中有两个<connectionStrings>
元素。 (我在包含我的Entity Framework模型的类库的app.config中粘贴了一个。)
在我的例子中,我不得不将我的DBContext构造函数还原为使用静态连接字符串,如web.config中所定义
当我使用动态创建的连接字符串时,脚手架不起作用。
public MyContext() : base("name=MyContext") { }
我有同样的问题,它不会添加脚手架项目似乎通过nuget包管理器控制台卸载实体框架工作
运行包管理器控制台:
工具 - > NuGet包管理器 - >包管理器控制台
去除:
UnInstall-Package EntityFramework
要重新安装:
Install-Package EntityFramework
或者在一个命令中:
Update-Package -reinstall EntityFramework
我希望这可以帮助别人,因为我花了一段时间来解决这个问题。
这可能有助于解决您的错误。
在我的OnModelCreating中,我为每个实体执行此操作:
modelBuilder.Configurations.Add(new EntityTypeConfiguration<EntityModel>);
当我将其更改为以下内容时,我停止了您收到的错误。
modelBuilder.Entity<EntityModel>();