[注:本文以DB First为例]
EntityFrameworkCore
Entity Framework(EF) Core是轻量化、可扩展、开源和跨平台版的常用数据库访问技术
特点:
- 使.NET开发者可以使用.NET对象处理数据库
- 无需像以往那样编写大部分数据访问代码
数据库的创建
一般分为两种方式:
- Code First
- DB First
1
2
3
4
5
6
7
8
9
10
11
12CREATE TABLE [dbo].[Demo](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](200) NULL,
[ReleaseDate] [datetime] NULL,
[LeadingRole] [varchar](100) NULL,
[Genre] [varchar](100) NULL,
[Price] [money] NULL,
[CreateTime] [datetime] NULL,
[CreateUser] [varchar](50) NULL,
[LastEditTime] [datetime] NULL,
[LastEditUser] [varchar](50) NULL,
CONSTRAINT [PK_Movie] PRIMARY KEY [Id]);
构造测试数据
1 | insert into Demo (Name, ReleaseDate, LeadingRole, Genre, Price, CreateTime, CreateUser, LastEditTime, LastEditUser) |
创建数据实体
数据库和数据表创建后,需要在项目中创建与其对应的实体类DemoEntity.cs
1 | // 一般建议与数据库中的表的Colum名称所对应 |
创建业务模型
数据实体用于和数据表进行映射,业务模型用于在控制器和视图之间进行数据交互,此处的字段名称可以和Entity中的不一致。
1 | namespace MvcDemo.Models |
EF的安装与配置
- 通过Nuget包管理器进行EF依赖包的安装
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.SqlServer
- 配置SQL Server连接字符串
1
2
3
4
5
6
7
8
9
10
11
12
13// 在appsettings.json中添加数据库连接字符串配置
{
"ConnectionStrings": {
"Default": "Server=192.168.152.135;Database=DemoDB;User Id=sa;Password=admin@123;Trusted_Connection=True;TrustServerCertificate=true;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
} - 创建DbContext数据上下文
EF通过DbContext操作数据,所以需要创建属于整个项目的数据上下文,并继承于DbContext1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22// Entities/DemoDbContext
using Microsoft.EntityFrameworkCore;
namespace MvcDemo.Entities
{
public class DemoDbContext:DbContext
{
public DemoDbContext(DbContextOptions<DemoDbContext> options)
: base(options)
{
}
public DbSet<DemoEntity> Demo { get; set; }
// 将实体和数据表进行映射
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<DemoEntity>().ToTable("Demo");
}
}
} - 在Program.cs中,注入EF框架,并将appSetting.json配置的数据库连接字符串传递进去
1
2
3var builder = WebApplication.CreateBuilder(args);
//注入数据库框架
builder.Services.AddDbContext<DemoDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
创建控制器DemoController
创建DemoController,在Index中查询信息,并将数据传递给视图
1 | // Controllers/DemoController.cs |
创建视图Index.cshtml
1 | // Views/Demo/Index.cshtml |