如何使用Entity Framework连接Access数据库并实现CRUD操作?
使用Entity Framework对接Access数据库指南
一、准备工作
根据你使用的EF版本安装对应依赖:
- EF6:安装NuGet包
EntityFramework和System.Data.OleDb - EF Core:安装NuGet包
Microsoft.EntityFrameworkCore.OleDb
注意:Access数据库驱动分32位和64位,需确保项目平台目标(解决方案属性→生成→平台目标)与驱动位数一致,否则会出现连接失败。
二、配置连接字符串
根据Access数据库版本(.mdb/.accdb)配置连接字符串,放在App.config(EF6)或appsettings.json(EF Core)中:
1. EF6(App.config)
<connectionStrings> <!-- .accdb格式 --> <add name="AccessDbContext" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourPath\YourDatabase.accdb;" providerName="System.Data.OleDb" /> <!-- .mdb格式 --> <add name="AccessDbContext" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\YourPath\YourDatabase.mdb;" providerName="System.Data.OleDb" /> </connectionStrings>
2. EF Core(appsettings.json)
"ConnectionStrings": { "AccessDbContext": "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\YourPath\\YourDatabase.accdb;" }
三、生成实体类
1. 反向工程(自动生成)
EF6
打开Visual Studio→项目右键→添加→新建项→数据→ADO.NET实体数据模型→选择“来自数据库的EF设计器”→选择已配置的Access连接字符串→选择要生成实体的表→完成后自动生成实体类和DbContext。
EF Core
打开Package Manager Console,执行以下命令(替换路径和上下文名):
Scaffold-DbContext "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourPath\YourDatabase.accdb" Microsoft.EntityFrameworkCore.OleDb -Context AccessDbContext -OutputDir Models
该命令会自动生成实体类和DbContext到Models目录。
2. 手动创建实体类
如果不需要反向工程,可手动定义实体类,通过DataAnnotations或Fluent API配置映射:
// 示例实体类 public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } // EF6 DbContext public class AccessDbContext : DbContext { public DbSet<Product> Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseOleDb(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourPath\YourDatabase.accdb;"); } } // EF Core DbContext public class AccessDbContext : DbContext { public DbSet<Product> Products { get; set; } public AccessDbContext(DbContextOptions<AccessDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { // 可选:Fluent API配置,比如指定表名 modelBuilder.Entity<Product>().ToTable("Products"); } }
四、实现CRUD操作
1. 查询
using (var context = new AccessDbContext()) { // 查询所有产品 var allProducts = context.Products.ToList(); // 条件查询 var expensiveProducts = context.Products.Where(p => p.Price > 50).ToList(); // 单条查询 var product = context.Products.Find(1); }
2. 添加
using (var context = new AccessDbContext()) { var newProduct = new Product { Name = "New Product", Price = 29.99m }; context.Products.Add(newProduct); context.SaveChanges(); }
3. 更新
using (var context = new AccessDbContext()) { var product = context.Products.Find(1); if (product != null) { product.Price = 39.99m; context.SaveChanges(); } }
4. 删除
using (var context = new AccessDbContext()) { var product = context.Products.Find(1); if (product != null) { context.Products.Remove(product); context.SaveChanges(); } }
内容的提问来源于stack exchange,提问作者Arian Amiri
相关产品推荐
相关产品推荐

