我必须在C#.Net 4.0中开发一个桌面窗口应用程序,它将在三个不同的数据库中运行,即.MS Access 2007及更高版本,Oracle 11G和SQL Server 2008.现在我想在我的应用程序中使用Entity Framework.这是我的应用程序使用EF的最佳选择吗?如果是,那么我如何使用Access数据库的实体框架?提前致谢.
在本次论坛在这里,有人提到,实体框架不能使用Access(Jet数据库- .mdb)中.然而,它似乎有A如对Jet数据库供应商在这里
这让我觉得Entity Framework唯一需要的就是在定义模型之前定义以下内容:
<connectionStrings>
<add name="ProductContext"
providerName="Microsoft.Jet.OLEDB.4.0"
connectionString="Source=C:\mydatabase.mdb;Jet OLEDB:Database
Password=MyDbPassword;"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
有没有人知道实体框架是否适用于Jet DB,我想在开始之前确保它确实如此,因为我的设计文档依赖于这个事实.
谢谢
我正在尝试使用 Entity Framework Core 中的 Scaffold-DbContext 从现有的 MS Access 数据库创建模型。
在包管理器控制台中运行命令时:
Scaffold-DbContext "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Folder\Database.mdb;" EntityFrameworkCore.Jet
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Could not load type 'System.Data.OleDb.OleDbConnection' from assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=123123123'.
Run Code Online (Sandbox Code Playgroud)
我正在使用具有以下设置的 ClassLibrary 项目:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EntityFrameworkCore.Jet" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我正在使用EntityFrameworkCore.Jet提供程序。
x32 和 x64 OleDb Dll 都在机器中:
C:\Program Files\Common Files\microsoft shared\OFFICE14\ACEOLEDB.DLL
C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\ACEOLEDB.DLL
Run Code Online (Sandbox Code Playgroud)
从 Microsoft …
entity-framework-core .net-core jet-ef-provider .net-core-2.2
我正在尝试使用JetEntityFrameworkProvider从 WPF MVVM 应用程序使用 Access 数据库,但无法使其工作。我已经创建了模型,使用 Add-Migration 创建了迁移,但是当我运行 Update-Database 时,该命令永远不会完成。它确实创建了数据库,但唯一的表是 MSysAccessStorage。文档中有一部分说
为了使提供程序正常工作,表 MSysRelationships 应该可以从管理员访问
并进一步说
这是默认配置,因此无需进行更改。2003版本以来的访问具有可见的系统表,因此无需分配权限。必须完成配置并设置正确的双表(在代码的早期阶段)。
JetConnection.DUAL = JetConnection.DUALForAccdb;
我尝试添加此内容,但我无法弄清楚“代码中的早期部分”在哪里。我已将其添加到 App.xaml.cs 的顶部和数据库上下文中,但都不起作用。当我添加它时,我得到:
当前上下文中不存在名称“DUAL”。当前上下文中不存在名称“JetConnection.DUALForAccdb”。
这是我的上下文中的 OnConfiguring
protected override void OnConfiguring( DbContextOptionsBuilder optionsBuilder )
{
optionsBuilder.UseJet( @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\<User>\Desktop\New Folder\Staff.accdb;" );
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
因为作者要求帮助请求转到StackOverflow,所以在这里抛出这个.
有一个正在进行的现有应用程序,最初写入SQL Server.可悲的是,现在有一个非常古老的Access数据库,我必须与之交谈.尝试使用JetEntityFramework帮助我,所以我不需要进行批发替换.走出大门,我抛出这个例外.我怀疑web.config有问题,因为正确设置它的文档很少.
错误
System.InvalidOperationException未由用户代码处理
HResult = -2146233079 Message =实体框架提供程序类型'JetEntityFrameworkProvider.JetProviderFactory,JetEntityFrameworkProvider,Version = 1.2.4.0,Culture = neutral,PublicKeyToken = 756cf6beb8fe7b41'的'Instance'成员未返回继承自'System.Data.Entity.Core.Common.DbProviderServices'的对象.实体框架提供程序必须从此类继承,并且"实例"成员必须返回提供程序的单例实例.这可能是因为提供者不支持实体框架6或更高版本; 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882.
这是我的web.config的相关片段(被要求更改DBContext和MDB文件的实际名称)
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="JetEntityFrameworkProvider" type="JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider"/>
</providers>
</entityFramework>
<connectionStrings>
<add name="MyDBContext"
connectionString="Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\MyAccessDB.MDB"
providerName="JetEntityFrameworkProvider.JetConnection" />
</connectionStrings>
<system.data>
<DBProviderFactories>
<remove invariant="JetEntityFrameworkProvider"/>
<add invariant="JetEntityFrameworkProvider"
name="Jet Entity Framework Provider"
type="JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider"/>
</DBProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)