博客
关于我
[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-通过函数传递变量
    查看>>
    Python内置函数详解——总结篇
    查看>>
    Python.对象集合中的标识.和散列
    查看>>
    Python.硒.拖放错误“AttributeError:move_to 需要 WebElement“
    查看>>
    Python内置函数详解
    查看>>
    Python/Kivy:从一个类调用函数到另一个类并在 Python 中显示小部件
    查看>>
    Python/Kivy:我可以在双击标签时调用函数吗
    查看>>
    python内置函数5-frozenset()
    查看>>
    Python/Plotly:如何使用要显示的信息自定义悬停模板?
    查看>>
    Python/Selenium - 无法单击 www.instagram.com 上的“接受 cookie“按钮
    查看>>
    Python内置函数(35)——next
    查看>>
    python写入mysql
    查看>>
    python写入csv老是乱码或者各种不好
    查看>>
    Python内置函数
    查看>>
    Python2 安装MySQLdb库
    查看>>
    Python2 已终结,入手Python 3,你需要这30个技巧
    查看>>
    python写下拉列表在excel,无法使用python获取Excel下拉列表(组合框)值
    查看>>
    python2.7安装
    查看>>
    Python2.7安装ncmbot时提示:Microsoft Visual C++9.0 is required
    查看>>
    PYTHON2.Git.1
    查看>>