问题标签 [jet-ef-provider]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在 Visual Studio 2019 for C# 上安装 JetEntityFrameWorkProvider
我想在 Visual Studio 下用 C# 开发一个应用程序,并假装使用带有两个 Access DB(带有 accdb 扩展名)的实体框架。我找到了由 Umberto Ballestrazzi(别名 Bubi)开发的 JetEntityFrameworkProvider 项目,我看到了解释在 Visual Studio 上工作的所有过程的视频,但我不明白。其中一个步骤需要下载和编译项目,但编译前和编译后命令失败并显示以下消息:
错误命令“调用“D:\Microsoft Visual Studio\2019\Community\Common7\IDE..\Tools\vsvars32.bat”gacutil /u JetEntityFrameworkProvider.dll”退出,代码为 9009。项目:JetDdexProvider。
错误命令 ""%ProgramFiles%\Microsoft SDKs\Windows\v8.0A\Bin\NETFX 4.0 Tools\gacutil.exe" /u "JetEntityFrameworkProvider"" exited with code 3. 项目:JetEntityFrameworkProvider。
按照视频指示,我下载了 JetEntityFrameWorkProvider 和 DDEX-Deserialiser Nugets。我已经手动添加了 machine.config 条目,我已经将 vsvars32.bat 更改为 vsdevcmd.bat,正如其他一些线程所建议的那样,我没有取得进展。
我怎样才能使用它来创建和使用 Access Provider 的 EDMX 图?我可以将它与 Access 版本 2007 或 2010、MDB 和 ACCDB 一起使用吗?
需要注意的事项:
我想与 Visual Studio 2019 一起使用,我在 Visual Studio Community 2017 或更早版本中找到的所有解决方案,如果没有其他方法可以降级到 2017,如果这可以解决问题,但我更喜欢使用 2019。
我已经下载了 JetEntityFrameWorkProvider 版本 6.2.0-rc1 和 DDEX-Deserialiser 版本 3.7.0 Nugets。
我已按照 Bubi 发布的此链接的指示来解释该过程:https ://www.youtube.com/watch?v=XHrpY_nMXrk
提前感谢您的时间和帮助。
c# - 脚手架现有的本地 MS 访问通过 .NET 框架:System.TypeLoadException:EntityFrameworkCore.Jet 中的方法“创建”未实现
我想在主页上表示现有本地 Access DB 的数据。为此,我将 ASP.NET MVC 与 Framework 4.7.2 一起使用。我必须使用EntityFrameworkCore.Jet,所以我不能使用Core。安装了以下软件包:
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.Tools
- EntityFrameworkCore.Jet
所以我尝试在 Package-Manager-Console 中搭建我的数据库:
但它会抛出一个错误:
System.TypeLoadException:程序集“EntityFrameworkCore.Jet,Version = 2.2.0.0,Culture = Neutral,PublicKeyToken = adb9793829ddae60”的类型“EntityFrameworkCore.Jet.Scaffolding.Internal.JetDatabaseModelFactory”中的方法“Create”没有实现。
我找不到它找不到程序集的原因。你有什么想法,为什么它不起作用?
c# - 具有不变名称“JetEntityFrameworkProvider”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册
我想将我的主页连接到 Access-DB。为此,我使用:
- .NET 框架 4.72 API
- EntityFrameworkProvider.Jet
当我尝试运行它时,我收到以下消息
System.ArgumentException:具有不变名称“JetEntityFrameworkProvider”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册,或者无法加载。Zeile 24: var result = from Daten_ALT in context.Sammlung Zeile 25: select Daten_ALT;
我的 homecontroller.cs 中的这个片段看起来像这样:
我的 ContextDB.cs:
我的 packages.config (减少到重要部分):
和 web.config (减少到重要部分):
如你所见,commets 是我试图解决它的方法。但这没有帮助。你有什么建议吗?是因为Linq吗?
c# - EntityFrameworkCore.Jet 在尝试连接到 MS Access DB 时返回错误
我是 Entity Framework 的新手,今天我正在尝试开发一个简单的 C# 脚本,它将使用 Entity Framework Core Jet 来列出本地 MS Access DB 中指定的所有公司。
但是,我在“OnConfiguring”函数中不断收到错误消息,它说:
System.TypeLoadException:来自程序集“EntityFrameworkCore.Jet,版本=2.2.0.0,文化=中性,PublicKeyToken=adb9793829ddae60”的“EntityFrameworkCore.Jet.Infrastructure.Internal.JetOptionsExtension”类型中的“方法“get_Info”没有实现。
请注意,我正在开发的 C# 控制台应用程序是在 .NET 框架 4.7.2 中开发的。我也尝试使用 .NET Core 3、.NET Core 2.1 等开发相同的脚本,但所有这些都有相同的结果。
我在下面提供了有关数据库的所有信息以及我迄今为止编写的代码。
数据库设计
数据库仅包含一个名为“Companies”的表,其中包含以下字段:
- ID(自动编号,主键)
- 公司名称(短文本)
数据上下文.cs
程序.cs
谢谢!
c# - Access 数据库无法在迁移中创建具有默认日期时间的表
我在迁移为我的表创建默认日期时间值时遇到了一些麻烦。我正在使用 EF Core Jet 提供程序,需要使用 MS Access-MDB-Files。
我的连接字符串如下:
我想将属性的默认日期时间设置为时间“15:30”。我尝试了以下事情:
entity.Property(e => e.EndTime).HasDefaultValueSql("#01.01.1900 15:30:00#");
entity.Property(e => e.EndTime).HasDefaultValueSql("#01.01.1900 15:30#");
entity.Property(e => e.EndTime).HasDefaultValueSql("#15:30:00#");
entity.Property(e => e.EndTime).HasDefaultValueSql("#15:30#");
entity.Property(e => e.EndTime).HasDefaultValueSql("#01/01/1900 03:30:00#");
entity.Property(e => e.EndTime).HasDefaultValueSql("#01/01/1900 03:30#");
entity.Property(e => e.EndTime).HasDefaultValueSql("#03:30:00#");
entity.Property(e => e.EndTime).HasDefaultValueSql("#03:30#");
entity.Property(e => e.EndTime).HasDefaultValue(new TimeSpan(15,30,0));
entity.Property(e => e.EndTime).HasDefaultValue(new TimeSpan(3,0,0));
并且总是收到以下错误消息:
System.Data.OleDb.OleDbException (0x80040E14):CREATE TABLE 语句中的语法错误。
然后我深入研究了 EntityFrameworkCore.Jet 的源代码,并在 JetMigrationsSQLGenerator 类中的以下注释中找到:
// Jet does not support defaults for hh:mm:ss in create table statement
但在我们的旧代码库中,我们正是使用 ADO-Driver(它是一个遗留的 Delphi 应用程序)来执行此操作。
所以我有以下问题:
- 我认为这通常是可能的,我错了吗?
- EF-Core Jet 提供程序中实现的行为是否错误?
- 最重要的是:我怎样才能让它工作?
编辑:
为了澄清我的步骤,我总是在更改模型构建器配置并使用功能Add-Migration <MigrationName>
并Update-Database
对其进行测试后删除了 Migrations 文件夹。
编辑 2:
似乎 EF Core 提供者的评论并非完全错误。#12.30.1899 03:30:00#
Access 不支持使用 TimeSpan 创建的组合日期时间。但是,如果直接在 Access 中输入 create 语句并使用 time ( #03:30:00#
) 就可以了。但我无法让 EF Core 创建这样的语句。
编辑 3:
在我使用该函数的情况下,HasDefaultValueSql
语法错误的原因似乎是 EF Jet Provider 中的一个错误。使用此函数时,创建的 SQL 语句以 this 结尾DEFAULT ('#<value>#'),
的问题是不接受括号。这似乎是一个已知问题。
编辑 4: 我的应用程序文化存在问题。我更改了它,现在我可以让 EF Core 成功生成 DateTimes,但是由于 Jet-provider 的实施,这些时间值丢失了。所以目前的情况如下:如果我使用
DateTime
我确实可以Update-Database
成功调用,但没有时间值,只有日期TimeSpan
Update-Database
通话失败(我怀疑 Access 不喜欢有时间的日期)HasDefaultValueSql("#03:30:00#")
调用时我也遇到异常UpdateDatabase
我认为 EF Core Jet Provider 是这里的问题,但我并不完全相信。
jet-ef-provider - 我无法编译 JetEntityframeWork
我想在我的项目中使用 JetEntityframeWork 将 MS Access 数据库用作 DbFirst。我尝试根据此处 JetEntityframeWork 的安装指南启用 DbFirst ,但我不能。
这是我启用的步骤:
- 从这里下载 JetEntityframeWork v-6.2.0 源代码。
- 提取 zip 文件
- 以管理员身份打开我的 Visual Studio 2019 并打开解决方案
- 更新“Install.cmd”(REGROOT)=>“SET REGROOT=SOFTWARE\Microsoft\VisualStudio\19.0_Config”
- 编译项目在此处输入图像描述。
它返回一个错误 ,在此处输入图像描述。
我忘了什么吗?我现在该怎么办?
entity-framework-core - 无法在 EF Core 5 上使用 EntityFrameworkCore.Jet 搭建脚手架-DbContext
我想搭建一个旧的 ms 访问数据库 (.mdb)。因此,我使用 Visual Studio 2019 为控制台应用程序创建了一个 sln。然后使用 nuget 添加以下软件包:
在包管理器控制台中,我输入
Scaffold-DbContext -Connection "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Repo\Samp.mdb;Jet OLEDB:Database Password=**** ;" -Provider EntityFrameworkCore.Jet -OutputDir Models\Models600 -verbose
命令运行,我收到以下错误:
找不到方法:'无效 Microsoft.EntityFrameworkCore.Storage.DecimalTypeMapping..ctor(System.String, System.Nullable`1<System.Data.DbType>)'。
我需要做什么才能使其正常工作?
jet-ef-provider - VS2017 中的 JetEntityFrameworkProvider 设置
在VS2017 15.9.21
for.NET 4.5 中编译我的项目后,出现以下错误,我错过了什么?
这是抛出异常的地方:
这是我的 DbContext 设置:
这是我的config.app
异常详情:
entity-framework-core - 尝试在向上迁移中更改列数据时出现锁定问题
我正在尝试将 sql 语句添加到我当前项目的迁移的 up-method 中。该数据库是一个 Ms Access 数据库。迁移在运行时应用。情况如下:我有一个基础Initial-create
迁移,在我的情况下假设已经应用了它。由于这个应用程序的性质,我们有一个表A它包含某种外键,但没有定义任何 sql-constraints。这意味着外键关系是通过程序代码设计的,而不是在 sql 中表示外键关系。键是一个字符串,如果没有外部元素,则值为空。现在我们要添加一个新的迁移,它通过 sql-constraints 强制执行这种关系。这可以通过标准的 ef-core 迁移代码正常工作,但是当迁移应用于非空数据库时就会出现问题。sql 外键需要表A中的所有空字符串为空(否则会出现异常)
看似简单的解决方案是在新迁移的 up-method 中添加以下语句:
但这会导致以下异常:
但是,如果我们从迁移代码中删除此 sql 语句并按如下方式执行它,则在调用之前context.Database.Migrate()
:
它工作得很好。我在 up-method 中使用 sql 代码的方法完全错误吗?这可能是什么原因?最重要的是,我该如何解决这个问题?第二种方法是我目前解决这个问题的方法,但我担心这意味着从长远来看,我不能使用迁移机制,而必须使用自定义解决方案(或其他框架)。我宁愿坚持使用 ef 核心。
重要提示:此应用程序与旧应用程序一起使用,我们必须在初始启动时通过 sql 代码插入应用程序历史记录。为此,我们创建一个事务并简单地创建历史表并插入最初创建的表。这工作得很好,事务和命令都应该关闭。这个函数永远不会触及表A。