博客
关于我
[Abp 源码分析]七、仓储与 Entity Framework Core
阅读量:442 次
发布时间:2019-03-06

本文共 1834 字,大约阅读时间需要 6 分钟。

Abp框架与EF Core仓储模式详解

Abp框架内置了强大的仓储模式,支持EF Core与Dapper两种数据库连接方式。通用仓储通过注入 IRepository 接口,简化了数据操作流程,无需为每个实体定义单独的仓储实现。以下将详细介绍Abp仓储的定义与实现、EF Core的工作单元以及多数据库支持的实现。


1. Abp仓储的定义与实现

Abp框架的仓储定义位于Domain/Repositories目录下,主要包括以下文件:

  • AbpRepositoryBase.cs:仓储基类,提供基础操作。
  • AutoRepositoryTypesAttribute.cs:用于标记实体的仓储类型,支持自动构建。
  • IRepository.cs:仓储基本接口定义,包含CRUD操作。
  • IRepositoryOfTEntity.cs:默认主键为int的仓储接口。
  • IRepositoryOfTEntityAndTPrimaryKey.cs:用户定义主键的仓储接口。
  • ISupportsExplicitLoading.cs:支持显式加载的仓储接口。
  • RepositoryExtensions.cs:仓储扩展方法库。
  • 1.1仓储接口定义

    主要仓储接口由IRepositoryOfTEntityAndTPrimaryKey<TEntity, TPrimaryKey>定义:

    public interface IRepository
    : IRepository
    where TEntity : IEntity
    { // CRUD方法定义}

    该接口定义了两个泛型参数,要求 TEntity 必须实现 IEntity

    。IRepository
    是默认主键为int的仓储接口。

    1.2仓储实现

    默认仓储实现由EfCoreRepositoryBase<TDbContext, TEntity, TPrimaryKey>提供,内部使用EF Core进行数据库操作。该基类注入IUnitOfWorkManager和IIocResolver,用于控制事务和依赖注入。

    EfCoreRepositoryBase的实现包括:

    • 获取数据库上下文。
    • 获取实体表。
    • 数据库事务和连接管理。
    • CRUD操作实现,如Insert、Update、Delete等。

    2. Entity Framework Core (EF Core)

    EF Core是Abp框架的默认ORM工具,提供强大的数据操作功能。

    2.1工作单元(UnitOfWork)

    Abp框架中的工作单元由EfCoreUnitOfWork实现,注入IocResolver、DbContextProvider等组件。其主要功能包括:

    • 管理数据库事务。
    • 提供数据上下文。
    • 执行事务提交和滚回。

    EfCoreUnitOfWork的实现包括:

    • Get DbContext 方法,返回激活的数据库上下文。
    • BeginTransaction 开始新事务。
    • CommitTransaction 提交事务。
    • RollbackTransaction 滚回事务。

    2.2数据库上下文提供器

    IDbContextProvider接口定义了获取数据库上下文的方法:

    public interface IDbContextProvider
    where TDbContext : DbContext{ TDbContext GetDbContext(); TDbContext GetDbContext(MultiTenancySides? multiTenancySide = null);}

    默认实现由 EfCoreDbContextProvider 提供,通过IocResolver获取UOW,然后调用GetDbContext方法。

    2.3多数据库支持

    Abp框架支持多数据库通过覆盖IConnectionStringResolver实现。具体步骤包括:

  • 定义多个数据库配置。
  • 根据DbContext类型选择相应的数据库连接。
  • 提供多租户支持,基于多个数据库上下文。

  • 3. 总结

    Abp框架通过通用仓储模式简化了数据操作流程,支持EF Core和Dapper两种数据库连接方式。其工作单元和多数据库支持机制确保了高效的事务管理和灵活的数据库配置。

    转载地址:http://vuryz.baihongyu.com/

    你可能感兴趣的文章
    Python两个版本共存时,命令行升级pip
    查看>>
    Python两个版本共存时,怎么验证是否安装成功 scrapy
    查看>>
    Python两个版本共存时,通过pip安装Scrapy
    查看>>
    python两组变量的相关关系散点图_变量是什么?变量间的两种关系——函数关系和相关关系(小学版)...
    查看>>
    Python中 pass语句的作用
    查看>>
    python中 urllib, urllib2, httplib, httplib2 几个库的区别
    查看>>
    python中 yaml库 & json库 & xmltodict库使用
    查看>>
    python中 将你的名字转化成为二进制并输出
    查看>>
    Python中*args 和**kwargs的用法
    查看>>
    Python中*args 和**kwargs的用法
    查看>>
    Python中*args和**kwargs的使用
    查看>>
    python中0、1、True、False、if条件
    查看>>
    python中argparse模块关于 parse_args() 函数详解(全)
    查看>>
    python中base64编码与解码
    查看>>
    python中break怎么用_详解Python中break语句的用法
    查看>>
    python中del函数的垃圾回收
    查看>>
    Python中DrissionPage的详细解析与实战
    查看>>
    python中enumerate、变量类型转换
    查看>>
    python中execute是啥_python – 为什么“c.execute(…)”打破循环?
    查看>>
    python中exit和break区别_Python中exit()和sys.exit()之间的区别
    查看>>