[注:本文以Code First为例 ]
安装 从NuGet包管理器内搜索EF进行安装,涉及两个包Microsoft.EntityFrameworkCore
| Microsoft.EntityFrameworkCore.SqlServer
定义连接字符串 1 2 3 4 5 "ConnectionStrings" : { "DemoDbConnection" : "Server=(localdb)\\MSSQLLocalDB; Database=DemoDb;MultipleActiveResultSets=true" }
创建数据库上下文 1 2 3 4 5 6 7 8 9 10 11 using Microsoft.EntityFrameworkCore; namespace Demo.Models { public class DemoDbContext : DbContext { public DemoDbContext (DbContextOptions< DemoDbContext > options ) : base (options ) { } public DbSet<User> Users { get ; set ; } } }
DbContext基类提供对Entity Framework Core底层功能的访问,而Users属性将提供User对数据库中对象的访问
DemoDbCOntext派生自DbContext并添加了将用于读写应用程序数据的属性
配置实体框架核心 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 using BooksStore.Models;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.EntityFrameworkCore;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;... public void ConfigureServices (IServiceCollection services ) { services.AddControllersWithViews(); services.AddDbContext<DemoDbContext>(opts => { opts.UseSqlServer( Configuration["ConnectionStrings:DemoDbConnection" ]); }); } ...
Entity Framework Core配置AddDbContext方法,注册数据库上下文类,配置与数据库的关系
UseSQLServer方法声明使用的数据库,并通过IConfiguration对象读取连接字符串
创建数据库 存储库模式是使用最广泛的模式之一,提供了一种一致的方式来访问数据库上下文类提供的功能。
1 2 3 4 5 6 7 8 9 using System.Linq; namespace Demo.Models { public interface IDemoRepository { IQueryable<User> Users { get ; } } }
接口使用IQueryable允许调用者获取User对象序 列1 2 3 4 5 6 7 8 9 10 11 12 13 using System.Linq; namespace Demo.Models { public class EFDemoRepository : IDemoRepository { private DemoDbContext context; public EFDemoRepository (DemoDbContext ctx ) { context = ctx; } public IQueryable<User> Users => context.Users; } }
在Program.cs中修改代码,为用作实现EFUsersRepository类的IDemoRepository接口创建服务1 2 3 4 5 6 7 8 9 10 public void ConfigureServices (IServiceCollection services ) { services.AddControllersWithViews(); services.AddDbContext<DemoDbContext>(opts => { opts.UseSqlServer( Configuration["ConnectionStrings:DemoDbConnection" ]); }); services.AddScoped<IDemoRepository, EFDemoRepository>(); }
该AddScoped方法创建一个服务,其中每个HTTP请求都获取自己的存储库对象
创建数据库迁移 从工具-NuGet包管理器-包管理器控制台PMC中输入命令,即可完成数据库及表的创建
1 2 Add-Migration InitialCreate Update-Database
注:需要安装Microsoft.EntityFrameworkCore.Tools软件包
常见数据库
SQL
Demo
Package
SQL Server | Azure SQL
.UseSqlServer(connectionString)
Microsoft.EntityFrameworkCore.SqlServer
Azure Cosmos DB
.UseCosmos(connectionString, DatabaseName)
Microsoft.EntityFrameworkCore.Cosmos
SQLite
.UseSqlite(connectionString)
Microsoft.EntityFrameworkCore.Sqlite
EF Core In Memory DB
.UseInMemoryDatabase(databaseName)
Microsoft.EntityFrameworkCore.InMemory
PostgreSQL
.UseNpgsql(connectionString)
Microsoft.EntityFrameworkCore.PostgreSQL
MySQL | MariaDB
.UseMySql(connectionString)
Microsoft.EntityFrameworkCore.MySql
Oracle
.UseOracle(connectionString)
Oracle.EntityFrameworkCore