我在VS 2013 Professional中创建了一个MVC 5应用程序,然后首先使用EF 6.1代码与SQL Server Express上的现有数据库。当我尝试创建视图时,我正在使用“新建脚手架项目...”,然后选择“带视图的MVC 5控制器,使用实体框架。”我选择模型和上下文类,然后单击“确定”。然后出现以下错误消息,并且不创建任何代码。我已经卸载了EF Power Tools并出现了同样的错误。
错误
运行所选代码生成器时出错:'异常有 被调用的目标所抛出。'
我还尝试卸载/重新安装VS 2013和SQL Server,但没有任何更改。
关于可能导致此错误的其他任何想法?
答案 0 :(得分:41)
在我的情况下,我将连接字符串从Web.config移到了
<connectionStrings configSource="ConnectionStrings.config"/>
当我在尝试脚手架时开始收到错误。
运行所选代码生成器时出错:'调用目标已抛出异常。'
将我的连接字符串移回Web.config解决了我的问题。
答案 1 :(得分:15)
我也有这个问题, 我通过在我的数据库上下文中调用base.onModelCreating来解决问题
base.OnModelCreating(modelBuilder);
答案 2 :(得分:13)
这为我解决了这个问题,
将throwIfV1Schema: false
添加到DbContext
如此:
public MyDbContext() : base("ConectionStringName", throwIfV1Schema: false) { }
答案 3 :(得分:12)
使用带有'ASP.NET MVC5并使用实体框架的视图'的脚手架创建控制器时遇到了同样的问题
问题是因为我在web.config中的<connectionStrings>
之前提供了<configSections>
标记。在<connectionStrings>
解决问题后设置<configSections>
。
我想,虽然脚手架,ASP.NET MVC想要首先解析实体框架,然后是连接字符串,因为我之前提供了连接字符串,因此在解析Entity Framework版本后它找不到连接字符串所以它抛出调用问题。
答案 4 :(得分:10)
迟到的回复;但是,我发布这个答案,希望有人可以用这个答案来解决他们的问题。
由于某种原因,如果您的程序无法读取connectionString信息(来自web.config或其他方式),则会抛出此错误。
确保正确检索有效的connectionString信息,没有任何问题。
答案 5 :(得分:6)
我有同样的错误消息。
我尝试从“添加控制器”对话框中添加新的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中粘贴了一个。)
答案 6 :(得分:5)
就我而言,我不得不将我的DBContext构造函数恢复为仅使用静态连接字符串,如web.config中所定义
当我使用动态创建的连接字符串时,脚手架不起作用。
public MyContext() : base("name=MyContext") { }
答案 7 :(得分:5)
我有同样的问题,它不会添加脚手架项目似乎通过nuget包管理器控制台卸载实体框架
运行程序包管理器控制台:
工具 - &gt; NuGet包管理器 - &gt;包管理器控制台
删除:
UnInstall-Package EntityFramework
重新安装:
Install-Package EntityFramework
或者在一个命令中:
Update-Package -reinstall EntityFramework
我希望这可以帮助别人,因为我花了一段时间来解决这个问题。
答案 8 :(得分:3)
这可能有助于解决您的错误。
在我的OnModelCreating中,我为每个实体执行此操作:
modelBuilder.Configurations.Add(new EntityTypeConfiguration<EntityModel>);
当我将其更改为以下内容时,我停止了您收到的错误。
modelBuilder.Entity<EntityModel>();
答案 9 :(得分:3)
我没有运气就尝试了上述大部分内容。
最终奏效的是:
然后一切都恢复了工作,减去了3个小时的开发时间。
似乎与动态创建的连接字符串和模型有关。会对可能发生的事情有所了解。
答案 10 :(得分:2)
我的解决方案就像将Web Config中的连接字符串名称更改为 DefaultConnection 一样简单。即使我的dbContext有另一个名字!
花了我2个小时才发现这个废话!
答案 11 :(得分:2)
就我而言,我通过web.config中的连接字符串解决了这个问题。
预先知道我的问题
<connectionStrings configSource="Configs\ConnectionString.config"/>
我不知道为什么,但是无法连接到数据库并失败。
更改后
<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
并且有效
答案 12 :(得分:2)
检查实体之间的关系或其他模型设计问题。对于测试,创建没有关系的新类模型,并使用Scaffold生成控制器和视图。 适合我。
答案 13 :(得分:2)
在via Web.config
中连接设置/不一致条目似乎是一个问题。
要解决此问题,请按以下步骤操作:
删除与连接相关的信息(从Web.config
盯着&lt; connectionStrings&gt;并删除到目前为止生成的模型。
现在生成模型,它将在Web.config
文件中添加新的连接条目。生成模型后,构建解决方案然后开始执行Scaffolding控制。它会起作用。
答案 14 :(得分:2)
我也使用VS 2015遇到了这个问题。我在这里尝试了所有其他解决方案但没有成功。事实证明,我的连接字符串(虽然形成MS告诉我们如何形成它)需要双\才能正常工作。
以下是不起作用的内容:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />
以下是我将其更改为以使代码生成器工作的原因:
<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前面的双\字符和数据库名称。
希望这能节省一些时间。
<强>更新强>
这使代码生成工作,但随后应用程序将无法运行,因为\ V11.0不是有效的连接字符串。这看起来像MS在解析连接字符串时在代码生成中存在错误。在我运行代码生成以使应用程序再次运行之后,我不得不将其更改为单个\。
更新2
在我的合作伙伴进行了一些挖掘之后,我们发现真正搞砸了代码生成的事实是我们改变了“初始目录”字段。当项目由向导创建时,它会自动将初始目录设置为aspnet--。然后我们将此初始目录字段更改为DB。这对于运行应用程序非常有用。它可以很好地进入数据库。但由于某种原因,这搞砸了代码脚手架的生成。通过将初始目录恢复到以前的状态(aspnet--,脚手架再次开始工作(不需要\ V11.0)。
希望将来帮助某人。
答案 15 :(得分:1)
(我99%肯定)连接字符串问题。一旦我在Web.Config中解决了问题,错误就消失了。我首先在另一个项目中使用数据库,一旦我将数据库第一个连接字符串从App.config复制到web.config(使用相同的名称),它就按预期工作了。
答案 16 :(得分:1)
当我对我的模型进行一些更改时,我得到了同样的错误。只有我能够解决的方法是 1)停止/终止进程 2)清洁解决方案并重建解决方案
答案 17 :(得分:1)
我有同样的错误。以下是我为解决问题所做的两件事:
答案 18 :(得分:1)
在我的案例中,NuGet将以下提供程序添加到web.config:
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact"/>
当我将提供者更改为
时<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
它解决了这个问题(花了我大约5个小时来计算它:-()
答案 19 :(得分:1)
如果您有任何机会关注&#34;实体框架6入门首先使用MVC 5&#34;汤姆戴克斯特拉。
我加倍检查一切,我的连接字符串是完美的。我没有意识到的是我复制了另一套我已经拥有的appSettings。看下面
<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>
我的建议是检查每一寸Web.config,我确定这是罪魁祸首。
答案 20 :(得分:0)
使用Visual Studio 2015
升级的mysql服务器,在此过程中,visual studio的mysql从6.9.7升级到6.9.8
在我的网络配置中,仍然有对旧的6.9.7版本的引用
这是我的git diff解决了这个问题:
- <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>
答案 21 :(得分:0)
我意识到这个问题现在已经过时了,但我想我会发布什么解决了我的问题以防以后帮助任何人。就我而言,它是其他答案中提到的几件事的组合。为了保护我的连接字符串,我有......
执行此操作后,我无法再创建控制器。要解决这个问题,我不得不......
将一个无参数构造函数添加到我的上下文类中,并为其指定我的connectionString名称,如下所示:
public contextClass() : base("name=connectionStringName") { }
重建解决方案,再次创建控制器,它有效!
答案 22 :(得分:0)
大家。我知道我有点迟了,但我认为分享我对这个问题的经验仍然有效。
我在两个项目中遇到了这个消息,在这两种情况下,问题都在于连接字符串。
在第一种情况下,它是“InitialCatalog”而不是“Initial Catalog”(分开)。
在第二种情况下,服务器名称(数据源参数)是错误的。
我希望它有所帮助。
最好的问候。
答案 23 :(得分:0)
出于某种原因,当我在web.config中的<configSections>
之间评论oracle.manageddataaccess.client部分时,它工作正常。 (VS 2015和ODT 12)
<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>
答案 24 :(得分:0)
就我而言,问题是由外部应用设置文件引起的:
<appSettings configSource="appSettings.config" />
将应用设置重新带回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>
答案 25 :(得分:0)
我有这个:
<appSettings configSource="App_Config\Server\AppSettings.config" />
<connectionStrings configSource="bin\Connections.config" />
我必须全部删除并放回原处。
<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
删除仍然会导致相同的错误。
答案 26 :(得分:-1)
使用:VS 2015 Community Edition和EF 6.1.3 还实现了:种子方法,具有个性化类,并在web.config文件中配置,以便每次模型更改时运行。 这似乎与web.config文件中的一些配置错误有关,在我的情况下,就像我在本文中看到的文件的其他部分中的一些情况一样,该部分重复了不同的内容,但它是当然重复了主要标签。在该部分上,该部分不合适的情况也会导致相同的行为和狭窄的信息,同时尝试使用脚手架。
答案 27 :(得分:-2)
您的上下文类可能会抛出异常。
我在书#34; C#6.0和.NET 4.6 Framework&#34;数据访问层部分的最后一个练习之一是添加日志记录。好吧,我想这会炸毁脚手架巫师。可能未定义sqllog.txt
或HttpRuntime
上的文件权限......谁知道。当我评论所有这些东西时,它再次起作用。
namespace AutoLotDAL.EF
{
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Infrastructure.Interception;
using AutoLotDAL.Interception;
using AutoLotDAL.Models;
using System;
using System.Data.Entity.Core.Objects;
using System.Web;
public class AutoLotEntities : DbContext
{
//static readonly DatabaseLogger databaseLogger =
// new DatabaseLogger($"{HttpRuntime.AppDomainAppPath}/sqllog.txt", true);
public AutoLotEntities()
: base("name=AutoLotConnection")
{
////DbInterception.Add(new ConsoleWriterInterceptor());
//databaseLogger.StartLogging();
//DbInterception.Add(databaseLogger);
//// Interceptor code
//var context = (this as IObjectContextAdapter).ObjectContext;
//context.ObjectMaterialized += OnObjectMaterialized;
//context.SavingChanges += OnSavingChanges;
}
//void OnObjectMaterialized(object sender,
// System.Data.Entity.Core.Objects.ObjectMaterializedEventArgs e)
//{
//}
//void OnSavingChanges(object sender, EventArgs eventArgs)
//{
// // Sender is of type ObjectContext. Can get current and original values,
// // and cancel/modify the save operation as desired.
// var context = sender as ObjectContext;
// if (context == null)
// return;
// foreach (ObjectStateEntry item in
// context.ObjectStateManager.GetObjectStateEntries(
// EntityState.Modified | EntityState.Added))
// {
// // Do something important here
// if ((item.Entity as Inventory) != null)
// {
// var entity = (Inventory)item.Entity;
// if (entity.Color == "Red")
// {
// item.RejectPropertyChanges(nameof(entity.Color));
// }
// }
// }
//}
//protected override void Dispose(bool disposing)
//{
// DbInterception.Remove(databaseLogger);
// databaseLogger.StopLogging();
// base.Dispose(disposing);
//}
public virtual DbSet<CreditRisk> CreditRisks { get; set; }
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<Inventory> Inventory { get; set; }
public virtual DbSet<Order> Orders { get; set; }
}
}
答案 28 :(得分:-7)
EF 6.1不支持脚手架模板使用EF 5 Chares