概述
# 概述
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。 EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:
- 使 .NET 开发人员能够使用 .NET 对象处理数据库。
- 无需再像通常那样编写大部分数据访问代码。
# 安装 EF Core
要运行 EF,首先需要安装对应环境,通过 NuGet
包或者命令行 dotnet add package 包名
进行安装即可。请参照下表对应的不同数据库进行选择:
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Sqlite
- Microsoft.EntityFrameworkCore.InMemory
- Pomelo.EntityFrameworkCore.MySql
- MySql.EntityFrameworkCore
- Npgsql.EntityFrameworkCore.PostgreSQL
- Oracle.EntityFrameworkCore
同时需要注意安装版本,一般来说都与 ASP.NET 版本对应。
更多请查看 官方文档。
# 安装 CLI 工具
有时需要安装 dotnet ef
工具,此时可以通过以下命令进行全局安装:
dotnet tool install --global dotnet-ef
# 一个最简单的例子
通过一个简单的例子来快速了解该框架的用法。
示例代码
完整代码可以看 示例代码
首先创建一个空白控制台项目,可以在 vs 中添加,亦可以通过命令来添加:
dotnet new console -o Database.Basic
# 添加 EF 包
该示例使用 SQLite
包,其他包同理:
Microsoft.EntityFrameworkCore.Sqlite
# 添加模型
创建部门模型,根目录添加一个 Department.cs
文件并添加如下内容:
public class Department
{
/// <summary>
/// 部门 Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string Name { get; set; }
}
2
3
4
5
6
7
8
9
10
11
12
创建用户模型,根目录添加一个 User.cs
文件并添加如下内容:
public class User
{
/// <summary>
/// 用户 Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string Nickname { get; set; }
/// <summary>
/// 用户所在部门
/// </summary>
public int DepartmentId { get; set; }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 添加上下文
在根目录添加一个 UserDbContext.cs
文件并添加如下内容:
public class UserDbContext: DbContext
{
public DbSet<Department> Departments { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite(@"Data Source=UserDB.db");
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
# 创建数据库
DF Core
可以从现有数据库对模型进行 反向工程,同时也可以按照现有模型生成对应的数据库。
在 vs 中,可以通过 包管理器控制台 操作:
Install-Package Microsoft.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.Tools
Add-Migration InitialCreate
Update-Database
2
3
4
或者通过命令行:
dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet ef migrations add InitialCreate
dotnet ef database update
2
3
4
就可以在根目录下看到一个名为 UserDB.db
的文件和一个名为 Migrations
文件夹。
注意
如果使用的是像 SQLite 这样的本地文件式数据库,一定要修改输出方式为 始终复制,如下如:
否则会报:SQLite Error 1: 'no such table: Users'.
这样的错误。
# 使用
修改 Program.cs
中的内容为:
private static void Main(string[] args)
{
Console.WriteLine("Start...");
using var db = new UserDbContext();
#region 创建数据
Console.WriteLine("创建数据");
db.Add(new Department { Id = 1, Name = "IT" });
db.Add(new User
{
Id = 1,
DepartmentId = 1,
Username = "jeremyjone",
Nickname = "Jeremy Jone"
});
db.SaveChanges();
Console.WriteLine("创建数据完成");
#endregion
#region 查询数据
Console.WriteLine("查询数据");
var user = db.Users.FirstOrDefault();
if (user != null)
{
var department = db.Departments.FirstOrDefault(x => x.Id == user.DepartmentId);
if (department == null)
{
Console.WriteLine("部门为空");
}
Console.WriteLine($"读取到 {user.Username},昵称为:{user.Nickname},部门为:{department?.Name}");
}
else
{
Console.WriteLine("没有读取到用户信息");
}
#endregion
#region 更新数据
Console.WriteLine("更新数据");
if (user != null)
{
user.Nickname = "Jz";
}
db.SaveChanges();
Console.WriteLine("更新数据完成");
#endregion
#region 删除数据
Console.WriteLine("删除数据");
if (user != null)
{
db.Remove(user);
}
db.SaveChanges();
Console.WriteLine("删除数据完成");
#endregion
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
然后运行,会得到如下内容:
Start...
创建数据
创建数据完成
查询数据
读取到 jeremyjone,昵称为:Jeremy Jone,部门为:IT
更新数据
更新数据完成
删除数据
删除数据完成
2
3
4
5
6
7
8
9
一个最简单的示例就做完了。