我是在c#中使用Code First的新手。 在我的项目中启用迁移并启动我的站点后,出现错误:
Method 'ExecuteAsync' in type 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' from assembly 'EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' does not have an implementation.
我已经定义了上下文类。
namespace MyOA.Migration.Contexts
{
public class OADBContext : DbContext
{
public OADBContext() { }
}
}
我尝试在Global.asax中创建数据库,如下所示。
protected void Application_Start()
{
// Forces initialization of database on model changes.
using (var context = new Migration.Contexts.OADBContext())
{
context.Database.Initialize(force: true);
}
}
我试图搜索原因但不知道。 有什么建议? 提前谢谢。
答案 0 :(得分:3)
如果检查两个组件的.NET版本:
您将看到EntityFramework.SqlServer具有v4.0 .NET依赖性,但EntityFramework使用v4.5。这是问题的根源。我使用dotpeek工具检查程序集版本(there are other options from stack overflow to check .net vestion of an assembly)。
注意:当您使用jetBrains反射器工具反编译EntityFramework.SqlServer.dll时,您会发现没有ExecuteAsync方法。
我们要解决的问题是使用nuget.exe(来自visual studio或独立的nuget可执行文件:please find "latest nuget.exe")。并从命令行运行它:
cd "[path to your nuget.exe]"
nuget Install EntityFramework
将下载一组EF 6组合。使用.net v4.5文件夹中的EntityFramework和EntityFramework.SqlServer。
答案 1 :(得分:0)
我+ 1' d @Spirit's answer指出我问题的根源,但我能够通过搜索解决方案中的所有*.csproj
文件来自行修复它取代
packages\EntityFramework.6.1.3\lib\net40\EntityFramework.dll
^^^^^
带
packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll
^^^^^
我在项目中混合使用。我的症状是NCruch会在测试中得到异常,但是从NUnit测试运行器运行相同的测试会很好。
答案 2 :(得分:0)
我在工作中遇到了这个问题,尝试了没有运气的建议解决方案,但为我们设计的解决方案是使用相对较旧版本的实体框架,我们使用版本{{ 1}}而最新的(截至我写下这个答案的时候)是6.0.0
我的问题是我的项目定位于6.1.3
,并且在升级到.Net Framework 2.0
时突然出现警告,因此我尝试更新最新.Net Framework 4.6.1
上的实体框架包,但它停止了正常工作,并得到了上述异常。
希望这会有所帮助。
答案 3 :(得分:0)
我遇到了同样的问题,但原因不同。在“ C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files”文件夹中,有多个版本的entityframe dll。毫无疑问,旧版本。我已经回收了iis池并重新启动了计算机,但这没有用。我必须删除该文件夹中的所有文件,然后才成功了。
答案 4 :(得分:0)
由于所有类似的S / O问题都针对此问题,因此我将考虑另一个想法。检查以确保没有偶然将EntityFramework安装到您的GAC中。 IIS将采用GAC版本取代您的bin版本,从而导致某些严重的问题。