什么是Entity Framework Core
Entity Framework Core
EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:
- 使 .NET 开发人员能够使用 .NET 对象处理数据库。
- 无需再像通常那样编写大部分数据访问代码。
对象关系映射程序 (O/RM),使用模型对象通过EF Core 数据库提供程序访问数据库
Entity Framework Core通过Code First和DB First两种方式实现应用程序与数据库的对象关系映射。
Code First
- Code First是一种非常流行的方法,可以完全通过模型类代码控制数据库。
- 所有的数据库操作,数据库的更改,都取决于代码。
- 需要创建数据模型。
DB First
- 数据库优先的方法是当数据库准备好,然后实体框架将自动完成创建实体。
- 如果已经设计了一个数据库,并且不想做额外的工作,那么可以采用这种方法。
- 可以手动修改数据库并从数据库更新模型。
- 实体框架能够基于关系数据库中的表和列创建模型类。
EF Core 支持多个数据库引擎。数据库提供程序
Entity Framework Core 中的DbContext
DbContext 实例表示与数据库的会话,可用于查询和保存实体实例。 DbContext 是工作单元和存储库模式的组合。
使用DbContext前需要NuGet添加Microsoft.EntityFrameworkCore.对应的数据库提供程序的包。
ASP.NET Core注入数据库的会话服务
配置数据库连接字符串
ASP.NET Core 仓储模式
仓储模式作为领域驱动设计(Domain-Driven Design,DDD)的一部分,在系统设计中的使用非常广泛。它主要用于解除业务逻辑层与数据访问层之间的耦合,使业务逻辑层在访问数据库时无须关心数据的来源及存储方式,所有这些直接对数据的操作均封装在具体的仓储实现中。业务逻辑层只需要面向据访问层的抽象无须关心数据据访问层的具体实现(依赖倒置原则DIP:高级模块不应该依赖于低级模块。两者都应该依赖于抽象)
仓储(Respository)是存在于工作单元和数据库之间单独分离出来的一层,是对数据访问的封装。其优点:
- 业务层不需要知道它的具体实现,解除业务逻辑层与数据访问层之间的松耦合,达到了分离关注点。
- 提高了对数据库访问的维护,对于仓储的改变并不会改变业务的逻辑,数据库可以用Sql Server、MySql等。
在ASP.NET Core 中利用仓储模式结合依赖注入实现业务逻辑层与数据访问层之间松耦合设计。
实现仓储,通过数据库会话操作数据库
配置服务注入仓储
控制器中注入仓储并使用
仓储模式结构图
Entity Framework Core 迁移功能
新建项目因为没有添加数据迁移,没有生成对应数据库,会产生如下报错。
Entity Framework Core 迁移
Entity Framework Core 种子数据
在DbContext重载方法OnModelCreating中添加原始数据