博客
关于我
[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/

    你可能感兴趣的文章
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    OpenLayers学习三:地图旋转及地图跳转到某一点的方式(以类为接口)
    查看>>
    Openlayers实战:modifystart、modifyend互动示例
    查看>>
    Openlayers实战:判断共享单车是否在电子围栏内
    查看>>
    Openlayers实战:加载Bing地图
    查看>>
    Openlayers实战:绘制图形,导出geojson文件
    查看>>
    Openlayers实战:绘制图形,导出KML文件
    查看>>
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:自定义放大缩小,显示zoom等级
    查看>>
    Openlayers实战:自定义版权属性信息
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers实战:选择feature,列表滑动,定位到相应的列表位置
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(12/20):利用高德逆地理编码,点击位置,显示坐标和地址
    查看>>
    Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>