Fer*_*ozo 524 entity-framework
通过nuget下载EF6并尝试运行我的项目后,它返回以下错误:
没有为ADO.NET提供程序找到具有不变名称"System.Data.SqlClient"的实体框架提供程序.确保提供程序已在应用程序配置文件的"entityFramework"部分中注册.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882.

dou*_*lps 586
我刚刚陷入同样的问题,它看起来像EntityFramework虽然从NuGet包管理器安装没有正确安装在项目中.
我设法通过在Package Manager控制台上运行以下命令来修复它:
PM> Install-Package EntityFramework
Run Code Online (Sandbox Code Playgroud)
Clé*_*cou 379
您已将EF添加到类库项目中.您还需要将它添加到引用它的项目(您的控制台应用程序,网站或其他).
Fra*_*ein 206
您无需在控制台应用程序中安装Entity Framework,只需添加对程序集EntityFramework.SqlServer.dll的引用即可.您可以将此程序集从使用Entity Framework的类库项目复制到LIB文件夹,并添加对它的引用.
综上所述:
我希望它有所帮助.
Mik*_*ike 114
如果您忘记包含"EntityFramework.SqlServer.dll",也可以看到此消息.
它似乎是EF6中新添加的文件.最初我没有将它包含在我的合并模块中,并遇到了此处列出的问题.
And*_*ers 49
不是将EntityFramework.SqlServer添加到主机项目,而是可以确保从模型/实体项目中对它进行静态引用,如下所示
static MyContext()
{
var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
if(type == null)
throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}
Run Code Online (Sandbox Code Playgroud)
这将使构建过程包括与主机项目的程序集.
更多信息,请访问我的博客 http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/
Uma*_*bas 47
当您安装Entity Framework 6时Nuget.EntityFramework.SqlServer有时会错过另一个可执行文件.只需将Nuget包添加到该项目即可.
有时上面的测试项目不起作用
要在Test Project中解决此问题,只需将此方法放在Test Project中:
public void FixEfProviderServicesProblem()
{
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
Run Code Online (Sandbox Code Playgroud)
从未调用此方法,但正如我的观察,编译器将删除所有"不必要的"程序集,而不使用EntityFramework.SqlServer测试失败的东西.
Joh*_*nes 24
添加此功能
private void FixEfProviderServicesProblem()
Run Code Online (Sandbox Code Playgroud)
将库类中的数据库上下文类和缺少的DLL EntityFramework.SqlServer.dll复制到正确的位置.
namespace a.b.c
{
using System.Data.Entity;
public partial class WorkflowDBContext : DbContext
{
public WorkflowDBContext()
: base("name=WorkflowDBConnStr")
{
}
public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
public virtual DbSet<TaskItem> TaskItems { get; set; }
public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
private void FixEfProviderServicesProblem()
{
// The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
// for the 'System.Data.SqlClient' ADO.NET provider could not be loaded.
// Make sure the provider assembly is available to the running application.
// See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}
}
Run Code Online (Sandbox Code Playgroud)
.
Car*_*rra 19
这些都不适合我.我确实在另一个stackoverflow问题中找到了解决方案.我会在这里添加它以便于参考:
您需要创建一个引用,因此它将被复制到den应用程序路径中.因为稍后它将在运行时引用.所以你不需要复制任何文件.
private volatile Type _dependency;
public MyClass()
{
_dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Run Code Online (Sandbox Code Playgroud)
小智 8
我在使用Entity Framework 6和SQL Server Compact 4.0时遇到了同样的错误.有关EF6 实体框架提供程序的 MSDN文章很有帮助.在Package Manager Console中以nuget包的形式运行相应的提供程序命令可能会解决问题,因为NuGet包也会自动将注册添加到配置文件中.我跑去PM> Install-Package EntityFramework.SqlServerCompact解决问题.
小智 8
引用正在使用 Entity Framework 的项目的启动项目在其 bin 文件夹中需要以下两个程序集:
在启动项目的 .config 文件中添加<section>,<configSections>使该 bin 目录中的第一个程序集可用。您可以从实体框架项目的 .config 文件中复制它:
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
Run Code Online (Sandbox Code Playgroud)
为了使 bin 文件夹中的第二个 .dll 可用,虽然不切实际,但可以从实体框架项目的 bin 文件夹中手动复制。更好的替代方法是将以下几行添加到实体框架项目的构建后事件中,这将自动化该过程:
cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\
Run Code Online (Sandbox Code Playgroud)
小智 7
当测试项目中发生错误时,最漂亮的解决方案是使用以下方法装饰测试类:
[DeploymentItem("EntityFramework.SqlServer.dll")]
Run Code Online (Sandbox Code Playgroud)
今天,当使用一组Web服务(每个项目都在不同的项目中)和一个单独的项目(其中包含其中一些服务的集成测试)时,就会遇到这个问题。
我在EF5上使用该设置已有一段时间,而无需包含来自Integration Test Project的EF引用。
现在,在升级到EF6之后,似乎我也需要在集成测试项目中也包括对EF6的引用,即使在那里没有使用它(如上user3004275所指出的那样)。
指示您面临相同的问题:
第三点是让我离开一会儿的原因,但我仍然不确定为什么要这样做。无论如何,在我的集成测试项目中向EF6添加一个引用都可以解决该问题...
将下面添加到您的 app.config。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360991 次 |
| 最近记录: |