问题标签 [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.

0 投票
1 回答
400 浏览

entity-framework-6 - JetEntityProviderFramework EF6 中的连接池

刚刚注意到https://github.com/bubibubi/EntityFrameworkCore.Jet支持连接池。我目前正在使用https://github.com/bubibubi/JetEntityFrameworkProvider并希望在 EF6 版本中使用连接池,直到我有时间将应用程序移植到 Core。

我可以为 JetEntityFrameworkProvider 设置连接池吗?如果是这样,怎么做?如果我打开连接池,有什么需要注意的吗?

0 投票
1 回答
778 浏览

jet-ef-provider - JetEntityFrameworkProvider - 数据库优先

我一直无法让 JetEntityFrameworkProvider 工作。想要连接到 MS2016 访问数据库的几个问题/评论(运行 VS2017,JetEntityFrameworkProvider 的 6.4.1 nuGet)。

  • 我观看了视频,但是当我查看最新 zip 中的文件时,没有 Key.snk 文件。我添加了自己的,但不确定是否需要更改其他内容?

  • 对于 JetDdexProvider,添加了 GenerateAssemblyInfo 的新资源名称并将值设置为 false,这样我就可以将版本设置为与我提取的 nuGet 包(6.1.4)中的版本相同,否则在构建 VS 时会在 AssemblyInfo 中添加 2 行。 cs 然后抱怨他们已经存在:

[程序集:AssemblyVersion("6.1.4.0")] [程序集:AssemblyFileVersion("6.1.4.0")]

  • 预构建命令没有找到 vsvars32.bat 所以我把它改成: call "C:\Program Files (x86)\Common7\Tools\vsvars32.bat" gacutil /u JetEntityFrameworkProvider.dll

  • 我正在运行 VS2017。我将 install.config 更新为:SET REGROOT=SOFTWARE\Microsoft\VisualStudio\14.0_Config。我在注册表中看到键 HKEY_USERS\S-1-5-21-3512878864-1034292029-1113751564-1001\Software\Microsoft\VisualStudio\14.0_Config\DataProviders{52C271ED-FAE1-444E-8C3A-6DFEC4C3A974},但 PlatformVersion 是 2 . 这应该是 6.4.1 (?)

当我尝试首先为数据库创建我的 edmx 文件时,我只列出了 SQL 服务器数据提供程序,因此试图找出我出错的地方。

谢谢瞌睡虫

0 投票
1 回答
1276 浏览

entity-framework-core - 无法使用 EntityFrameworkCore.Jet 搭建 DbContext

我一直在尝试为现有数据库生成实体框架模型。

我在 Visual Studio 2017 中使用 -Provider EntityFrameworkCore.Jet(v2.1.0 预览版 5)和EntityFrameworkCore(v2.1.2)。我在包管理器控制台中使用了以下命令:

这给了我这个输出:

Der 'Microsoft.ACE.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert。

这转化为

'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册。

起初我预计会是这种情况,并进行了一些研究,将我带到了这里,我遵循了给定的解决方案,但问题仍然存在。查看文件夹C:\Program Files (x86)\Common Files\microsoft shared包含子文件夹OFFICE12,每个文件夹OFFICE14都包含一个.OFFICE16ACEOLEDB.DLL

通过在 Code First 方法中使用确认,提供程序实际上已注册并且可用!但是在包管理器中使用时却找不到。我错过了一些具体的参考吗?

由于与 CodeFirst 一起使用时完全相同的 ConnectionString 正在工作,这可能是什么问题?还是没有为数据库优先方法启用 EntityFrameworkCore.Jet?

0 投票
1 回答
4152 浏览

c# - Entity Framework Core 和 MS Access

我正在尝试使用JetEntityFrameworkProvider从 WPF MVVM 应用程序中使用 Access 数据库,但我无法让它工作。我已经创建了模型,使用 Add-Migration 创建了迁移,但是当我运行 Update-Database 时,该命令永远不会完成。它确实创建了数据库,但唯一的表是 MSysAccessStorage。有一段文档

为了使提供程序工作,表 MSysRelationships 应该可以从管理员访问

并进一步说

这是默认配置,因此无需进行更改。自 2003 版以来的访问具有可见的系统表,因此无需分配权限。必须通过设置正确的双表来完成配置(在代码的早期)。

JetConnection.DUAL = JetConnection.DUALForAccdb;

我试过添加这个,但我不知道“你的代码很早”在哪里。我已将它添加到我的 App.xaml.cs 的顶部和我的数据库上下文中,但都没有工作。当我添加它时,我得到:

当前上下文中不存在名称“DUAL”。当前上下文中不存在名称“JetConnection.DUALForAccdb”。

这是我在我的上下文中的 OnConfiguring

我做错了什么?

0 投票
0 回答
1372 浏览

entity-framework - 如何通过 Entity Framework 和 JetEntityFrameworkProvider 连接 Access (*. Accdb)?

我使用:  Visual Studio 2017;
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />;
实体框架 - 6.1.4;
JetEntityFrameworkProvider - 6.2.0;
赢表格;

微软访问 - 2016;
数据库 - db.accdb;
表 - 项目、任务。

通过 Nuget 安装的 EntityFramework、JetEntityFrameworkProvider。

 
文件App.config

我更改了文件machine.config
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

复制项目(F6)。

我做以下  [
在此处输入图像描述 在此处输入图像描述  在此处输入图像描述在此处输入图像描述 在此处输入图像描述

问题。
如何通过 Entity Framework 和 JetEntityFrameworkProvider 连接到 Access (*.accdb)?

Update_1
通过 Nuget 安装“DDEX”
在此处输入图像描述

Update_2我在https://github.com/bubibubi/JetEntityFrameworkProvider
下载了项目
在此处输入图像描述

对于项目“JetDdexProvider”做了“分配一个启动项目”
在此处输入图像描述

F6
收到错误
*错误 退出“%ProgramFiles%\Microsoft SDKs\Windows\v8.0A\Bin\NETFX 4.0 Tools\gacutil.exe”/u“JetEntityFrameworkProvider”,代码为 3。

从命令“调用”C:\Program Files (x86)\Microsoft Visual Studio\2017\Community2\Common7\IDE\..\Tools\vsvars32.bat“gacutil/u JetEntityFrameworkProvider.dll”退出时出错 ,代码为 9009。JetDdexProvider

错误 CS0006
找不到元数据文件“Z:\vs\csharp\dll\JetEntityFrameworkProvider\2018.05.16\fl\Debug\JetEntityFrameworkProvider.dll”。JetEntityFrameworkProvider.Test Z:\vs\csharp\dll\JetEntityFrameworkProvider\2018.05.16\fl\JetEntityFrameworkProvider.Test\CSC 1

错误 CS0006
找不到元数据文件“Z:\vs\csharp\dll\JetEntityFrameworkProvider\2018.05.16\fl\Debug\JetEntityFrameworkProvider.dll”。JetEntityFrameworkProvider.Utilities Z:\vs\csharp\dll\JetEntityFrameworkProvider\2018.05.16\fl\JetEntityFrameworkProvider.Utilities\CSC*

0 投票
3 回答
7204 浏览

.net-core - 使用 Scaffold-DbContext、EntityFrameworkCore.Jet、.NetCore 时,错误无法从程序集 System.Data 加载类型 System.Data.OleDb.OleDbConnection

我正在尝试使用 Entity Framework Core 中的 Scaffold-DbContext 从现有的 MS Access 数据库创建模型。

当我运行命令时,在包管理器控制台中:

我收到以下错误:

我正在使用具有以下设置的 ClassLibrary 项目:

我正在使用EntityFrameworkCore.Jet提供程序。

x32 和 x64 OleDb Dll 都在机器中:

从 Microsoft Access Database Engine 2010 Redistributable 安装的 x64 和从 Office Professional Plus 32 位安装的 x32

脚手架 SQL 数据库工作正常。

已经去了https://github.com/bubibubi/EntityFrameworkCore.Jet/wiki/Limitations

是否缺少某些东西或此设置应该有效?任何帮助,将不胜感激。

0 投票
1 回答
589 浏览

ms-access - 脚手架 MS Access 数据库时出错(找不到可安装的 ISAM)

我正在使用 Entity Framework 6 来管理 MS Access 数据库(mdb 文件)。我现在正在使用这个项目 (bubibubi / EntityFrameworkCore.Jet) 但在他们的示例中,它使用 * .accdb 文件,而我使用 * .mdb 文件。当我执行:

我收到这条消息:Could not find installable ISAM.

我不知道也找不到我需要做什么。

我正在使用 C#、控制台应用程序、.Net Framework 4.6.1

编辑:如果我使用工作正常的新 Access 数据库文件 ( .accdb)。但这是一个遗留项目,我需要管理旧的访问文件( .mdb)

0 投票
1 回答
203 浏览

entity-framework - 将连接字符串传递给 JetEntityFramework

使用 System.Data.SqlClient 提供程序,可以将连接字符串传递给 DbContext 构造函数,如下所示;

是否有类似的方法可以在不使用 app.config 设置的情况下将连接字符串传递给 JetEntityFrameworkProvider 的 DbContext?

0 投票
1 回答
295 浏览

ef-core-2.2 - EF Core JET:在 MS Access 中“更新”更改的对象时出现 AccessViolationException

我正在构建一个.NET Core 3控制台应用程序,EF Core 2.2.xEntityFrameworkCore.Jet执行一些通用的读写访问数据库(mdb)。x86正如文档所说,我正在编译。目标是将丢失的大量数据从旧系统迁移到新系统(同步数据)。

我已经搭建了数据库,我可以完美地从数据库中读取,但是一旦我去更新一个实体,我就会遇到访问冲突异常:

代码示例(缩写为缩写):

命中此代码时,会出现以下异常(无内部异常)

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我不明白为什么会发生这种情况,因为我可以完美地读取数据库,它仅在写入时才会这样做。

我尝试使用以下连接字符串(驱动程序),但最终结果相同:

x64阅读作品上运行时,但出现以下异常:

我在这里迷路了,在黑暗中寻找。有没有人有我在哪里看的经验/想法?

2020 年 2 月 2 日更新:我尝试使用 OleDb 手动连接并运行查询以查看它带给我的位置。下面的代码有效。当我用上面的代码切换它时,它再次失败。

设置后,JetConfiguration.ShowSqlStatements = true我得到了以下堆栈跟踪:

Nuget 包 + 版本(与 Jet 相关):

运行这一切.NET Core 3.1

0 投票
2 回答
201 浏览

asp.net - EntityException:基础提供程序在打开时失败。一台服务器可以关闭数据库连接,使另一台服务器无法打开吗?

我在使用 VB 编写的、在三个 IIS 服务器上运行的 ASP.NET 应用程序时遇到数据库连接错误。底层数据库是 MS Access,它位于共享网络设备上。它使用实体框架、代码优先实现和 JetEntityFrameworkProvider。

应用程序运行稳定。但是,打开数据库连接的 1000 次尝试中大约有 1 次失败,出现以下两个错误之一:

或者

一秒钟后,通过刷新 (F5),错误消失并再次起作用。

有关环境和使用代码的详细信息。

连接字符串

数据库上下文管理

应用程序使用公共属性来访问 DbContext。DbContext 在请求的生命周期内保存在 HttpContext.Current.Items 集合中,并在请求结束时被释放。

BasePage 初始化并释放 DbContext。

我试过的

解决上述错误消息的许多关于 SO 的问题通常涉及无法建立与数据库的连接——它们根本无法连接。这与本案不同。连接在 99.99% 的时间内都有效。

除此之外,我还检查了:

  • 权限:对 .mdb(数据库)和 .ldb(锁定文件)所在的共享授予完全访问权限。
  • 网络连接:共享设备没有连接问题;这是一个千兆 LAN 连接
  • 未达到最大并发连接数 255
  • 未超过数据库的最大大小(db 只有 5 MB)
  • 按照MS Dev-Net 帖子中的建议,将编译选项从“Any CPU”更改为“x86”

Quote: 我得到相同的“无法打开数据库''”错误,但完全随机(似乎)。MDB 文件小于 1Mb,因此对于 2Gb 限制没有问题,因为这个错误经常提到。它在 32 位版本的 Windows 上工作 100%,但我发现问题出在 64 位安装上。该应用程序被编译为“任何 CPU”。我将编译选项从“Any CPU”更改为“x86”,问题就消失了。

到目前为止没有任何帮助。

为了收集更多信息,我将一个 Nlog 记录器附加到 DbContext,它将所有数据库操作和查询写入日志文件。

调查日志我发现当上述错误之一发生在一台服务器上时,另一台服务器(总共 3 台)同时关闭了数据库连接。这里有两个对应于上述错误的例子:

假设

当 DbContext 的所有连接都已关闭时,相应的记录将从 .ldb 锁定文件中删除。当打开与数据库的连接时,将在锁定文件中添加一条记录。当这两个事件同时发生时,来自两个不同的服务器,对 .ldb 锁定文件存在写入冲突,从而导致出现上述错误。

问题

任何人都可以确认或证明这是错误的吗?有没有人经历过这种行为?也许我错过了其他东西。感谢您对此的意见和经验。

如果我的假设是真的,一个解决方案可能是使用一个帮助类来访问 db,它会捕获并处理这个错误,等待最短的时间段并再次尝试。

但这感觉有点不对劲。因此,我也愿意接受有关“适当”解决方案的建议。

编辑: “正确”的解决方案将使用 DBMS 服务器(如下面的评论中所述)。我知道这一点。现在,我不得不处理这个设计错误,而不是对此负责。此外,我无法在短期内改变它。