通过.NET Framework脚手架现有的本地MS Access:System.TypeLoadException:EntityFrameworkCore.Jet中的方法“ Create”未实现

问题描述

我想在主页上表示现有本地Access DB的数据。为此,我将ASP.NET MVC与Framework 4.7.2结合使用。我必须使用EntityFrameworkCore.Jet,所以不能使用Core。已安装以下软件包:

  • Microsoft.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.Tools
  • EntityFrameworkCore.Jet

所以我尝试在Package-Manager-Console中架起我的数据库

Scaffold-DbContext “Data Source=C:\...\AKneu.mdb” EntityFrameworkCore.Jet -OutputDir Models

但是它会抛出一个错误

System.TypeLoadException:程序集“ EntityFrameworkCore.Jet,版本= 2.2.0.0,区域性=中性,PublicKeyToken = adb9793829ddae60”的程序集“ EntityFrameworkCore.Jet.Scaffolding.Internal.JetDatabaseModelFactory”中的方法“ Create”没有实施。

我找不到找不到程序集的原因。您有什么想法,为什么它不起作用?

解决方法

要使用脚手架,您需要使用Visual Studio 2015,这在GitHub项目的wiki中已提及:

如果您已经有一个数据库,则可以使用Package Manager Console Scaffold-DbContext命令从现有数据库创建模型类。此功能仅在Visual Studio 2015中可用。

前段时间我遇到了类似的问题,并指出,要使脚手架正常工作,您还需要使用EntityFrameworkCore的2.1.2版本和Jet-Provider的2.0.0版本。不幸的是,我没有指出为什么需要这样做,但这可能会对您有所帮助。

,

问题在于您尝试将 EFCore.Jet 2.2.0 提供程序与 EF Core 3.x 一起使用。 EF Core 2.2 提供程序与 EF Core 3.x 不兼容,并且会由于 EF Core 3.x 对其提供程序的期望发生变化而引发此错误。

要解决此问题,请使用最新版本的 EF Core 3.1.x(当前版本 3.1.10)和最新版本的 EFCore.Jet 3.1.x(当前预发布{{ 3}}) 来自 nuget.org。

EF Core 3.1 及其提供程序符合 .NET Standard 2.0,因此不仅支持 .NET (Core) 2.0+,还支持 .NET Framework 4.6.1+。