【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现
2020-06-09 22:20
956 查看
# 0. 前言
通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口。这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方。
# 1. 添加EF Core
先在数据层实现层引入 EF Core:
```bash
cd Domain.Implements
dotnet add package Microsoft.EntityFrameworkCore
```
当前项目以SqlLite为例,所以再添加一个SqlLite数据库驱动:
```bash
dotnet add package Microsoft.EntityFrameworkCore.SQLite
```
删除 Domain.Implements 里默认的Class1.cs 文件,然后添加Insfrastructure目录,创建一个 DefaultContext:
```c#
using Microsoft.EntityFrameworkCore;
namespace Domain.Implements.Insfrastructure
{
public class DefaultContext : DbContext
{
private string ConnectStr { get; }
public DefaultContext(string connectStr)
{
ConnectStr = connectStr;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(ConnectStr);//如果需要别的数据库,在这里进行修改
}
}
}
```
# 2. EF Core 批量加载模型
通常情况下,在使用ORM的时候,我们不希望过度的使用特性来标注实体类。因为如果后期需要变更ORM或者出现其他变动的时候,使用特性来标注实体类的话,会导致迁移变得复杂。而且大部分ORM框架的特性都依赖于框架本身,并非是统一的特性结构,这样就会造成一个后果:本来应该是对调用方隐藏的实现就会被公开,而且在项目引用关系中容易出现循环引用。
所以,我在开发中会寻找是否支持配置类,如果使用配置类或者在ORM框架中设置映射关系,那么就可以保证数据层的纯净,也能实现对调用方隐藏实现。
EF Core的配置类我们在《C# 数据访问系列》中关于EF的文章中介绍过,这里就不做过多介绍了(没来得及看的小伙伴们不着急,后续会有一个简单版的介绍)。
通常情况下,配置类我也会放在Domain.Implements项目中。现在我给大家介绍一下如何快速批量加载配置类:
```c#
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetAssembly(this.GetType()),
t => t.GetInterfaces().Any(i => t.Name.Contains("IEntityTypeConfiguration")));
}
```
现在版本的EF Core支持通过Assembly加载配置类,可以指定加载当前上下文类所在的Assembly,然后筛选实现接口中包含IEntityTypeConfiguration的类即可。
# 3. 使用EF Core实现数据操作
我们已经创建好了一个EF Context,那么现在就带领大家一起看一下,如何使用EF来实现 上一篇《「asp.net core」7 实战之 数据访问层定义》中介绍的数据访问接口:
新建一个BaseRepository类,在Domain.Implements项目的Insfrastructure 目录下:
```c#
using Domain.Infrastructure;
using Microsoft.EntityFrameworkCore;
namespace Domain.Implements.Insfrastructure
{
public abstract class BaseRepository
相关文章推荐
- Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作
- Asp.net core下利用EF core实现从数据实现多租户(2) : 按表分离
- asp.net core 系列 20 EF基于数据模型创建数据库
- Asp.net core下利用EF core实现从数据实现多租户(1)
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- ASP.NET 2.0 中实现模板中的数据绑定系列
- ASP.NET,Web界面利用Button来实现将telerik:RadGrid表格内数据导出Excel
- ASP.NET 2.0 中实现模板中的数据绑定系列(2)
- asp.net 利用微软数据访问类库结合AjaxPro实现无刷新下拉框级联
- [转]【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现
- ASP.NET Core实现强类型Configuration读取配置数据
- ASP.NET 2.0 中实现模板中的数据绑定系列(2)
- ASP.NET 2.0 中实现模板中的数据绑定系列
- ASP.NET 2.0 中实现模板中的数据绑定系列
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
- 详解ASP.NET Core实现强类型Configuration读取配置数据
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1
- ASP.NET 2.0 中实现模板中的数据绑定系列
- ASP.NET 2.0 中实现模板中的数据绑定系列