通过 .NET Framework 搭建现有的本地 MS Access:System.TypeLoadException:EntityFrameworkCore.Jet 中的方法 'Create' 未实现

Scaffold existing local MS Access via .NET Framework: System.TypeLoadException: Method 'Create' in EntityFrameworkCore.Jet not implemented

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

所以我尝试在 Package-Manager-Console 中构建我的数据库:

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

但是它返回一个错误:

System.TypeLoadException: The method "Create" in the type "EntityFrameworkCore.Jet.Scaffolding.Internal.JetDatabaseModelFactory" of the assembly "EntityFrameworkCore.Jet, Version = 2.2.0.0, Culture = neutral, PublicKeyToken = adb9793829ddae60" has no implementation.

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

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

If you already have a database, your can use the Package Manager Console Scaffold-DbContext command to create your model classes from an existing database. This feature is only available in 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 对其提供程序的期望发生变化将引发此错误。

要解决此问题,请使用来自 nuget.org 的最新版本的 EF Core 3。1.x(当前版本 3.1.10) with the latest release of EFCore.Jet 3.1.x (currently the prerelease 3.1.0-alpha.4)。

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