c# 使用Entity Framework操作Access数据库的示例

2019-12-30 18:56:49丽君

Entity Framework是C#开发中最常见的ORM工具。默认Entity Framework只提供支持MSSQL的provider factory。但是开发者开源贡献了对SQLite、MySql以及Access等的支持。

Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象;跟踪对象所做的更改;并发处理;将对象更改传播到数据源等。今天我们就一起讨论如何利用Entity Framework进行查询、插入、更新和删除数据。

EF操作使用步骤:1.创建数据库,建立表。2.先建一个控制台程序  3.添加ADO.net实体数据模型(AccountEF.edmx),会生成一个edmx和.cs的文件 ,我们点进.cs 的文件可以看到有(上下文,实体)两部分.具体代码如下.
edmx文件,用XML编辑器打开时,我们会看到包括: <!-- SSDL content -->存储模型

c#,Entity,Framework,Framework操作数据库

JetEntityFrameworkProvider

JetEntityFrameworkProvider为Access数据库文件兼容Entity Framework提供了相应的Provider。在nuget中直接搜索JetEntityFrameworkProvider即可安装该工具。虽然大多数操作最终是EntityFramework完成因此不需要什么变化,而在数据库连接等方面还是有些不同和需要注意的地方。

数据库连接

官方的资源并不多,只提供了一两个简单的操作视频

其中使用的connectionString为在App.config中或Web.config中预定义的以供DbContext实例化时引用。


<connectionStrings> 
 <add name="DefaultConnection" connectionString="Provider=Microsoft.ACE.OleDb.12.0;Data Source=你的mdb或accdb文件绝对路径" providerName="JetEntityFrameworkProvider" />
</connectionStrings> 

这样你在实例化自定义的DbContext子类时直接base("name=DefaultConnection")即可建立数据库连接。

但是我个人不喜欢在配置文件中写死配置,我更希望使用base(existingConnection, contextOwnsConnection)这种DbContext构造模式,所以需要先直接生成一个DbConnection,这里具体的就是OleDbConnection而不是SqlConnection了。

按照下面的方式直接使用DbProviderFactory创建连接:


var dbConnectionString = "Provider=Microsoft.ACE.OleDb.12.0;Data source=Access文件绝对路径;Persist Security Info=False"; 
var conn = DbProviderFactories.GetFactory("JetEntityFrameworkProvider").CreateConnection(); 
conn.ConnectionString = dbConnectionString; 

Code First或DB First

默认地,JetEntityFrameworkProvider只支持code first模式。即你先写好模型,然后根据模型生成数据库。

但是我的需求是用EF读取已存在的Access数据库文件,即DB First模式,这时使用EF读取Access数据库文件会报错提示数据表已存在。