首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >FreeSql.Repository (一)什么是仓储

FreeSql.Repository (一)什么是仓储

作者头像
huofo
发布2022-03-18 09:21:57
发布2022-03-18 09:21:57
7710
举报
文章被收录于专栏:huofo's bloghuofo's blog

欢迎来到《FreeSql.Repository 仓储模式》系列文档,完整文档请前往 wiki 中心:https://github.com/dotnetcore/FreeSql/wiki

FreeSql是功能强大的 .NET ORM,支持 .NetFramework 4.0+、.NetCore 2.1+、Xamarin 等支持 NetStandard 所有运行平台。支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/神通/人大金仓/翰高/MsAccess 数据库。QQ群:4336577(已满)、8578575(在线)、52508226(在线)

FreeSql 支持五种使用方式,根据实际情况选择团队合适的一种:

  • 要么 FreeSql,原始用法;
  • 要么 FreeSql.Repository,仓储+工作单元习惯;
  • 要么 FreeSql.DbContext,有点像 EFCore 的使用习惯;
  • 要么 FreeSql.BaseEntity,求简单使用这个;
  • 要么 IDbConnection CRUD,有点像 Dapper;

本系列文档,专注介绍 【仓储+工作单元】 的使用方式。

理解仓储

仓储是一种设计模式概念,不同于以往的 DAL,在 .NET 世界人们往往把仓储向 DDD 靠近,又把 EFCore 向 DDD 靠近。

我理解的仓储对标 JPA,更像一种 ORM 规范,使得应用程序不再深度依赖某一个特定的 ORM。

使用仓储的目标:能低成本的切换 ORM

仓储功能

  • 插入、批量插入;
  • 更新、批量更新;
  • 删除、批量删除;
  • 查询;
  • 实现工作单元事务;

以上几点是仓储的几个基本功能要求,定义不宜复杂,越复杂最终切换 ORM 越困难。

简单的仓储接口定义如下:

  • IBaseRepository
  • IBaseRepository<TEntity>
  • IBaseRepository<TEntity, TKey>
代码语言:javascript
复制
public interface IBaseRepository : IDisposable
{
    Type EntityType { get; }
    IUnitOfWork UnitOfWork { get; set; }
}

public interface IBaseRepository<TEntity> : IBaseRepository
    where TEntity : class
{
    IDataFilter<TEntity> DataFilter { get; }
    ISelect<TEntity> Select { get; }

    ISelect<TEntity> Where(Expression<Func<TEntity, bool>> exp);
    ISelect<TEntity> WhereIf(bool condition, Expression<Func<TEntity, bool>> exp);

    TEntity Insert(TEntity entity);
    List<TEntity> Insert(IEnumerable<TEntity> entitys);

    int Update(TEntity entity);
    int Update(IEnumerable<TEntity> entitys);

    TEntity InsertOrUpdate(TEntity entity);

    int Delete(TEntity entity);
    int Delete(IEnumerable<TEntity> entitys);
    int Delete(Expression<Func<TEntity, bool>> predicate);
}

public interface IBaseRepository<TEntity, TKey> : IBaseRepository<TEntity>
    where TEntity : class
{
    TEntity Get(TKey id);
    TEntity Find(TKey id);
    int Delete(TKey id);
}

FreeSql.Repository

仓储定义越简单,切换 ORM 越容易没错,但是开发起来也越麻烦,鱼和熊掌不可兼得,需要找到一个平衡点。

FreeSql.Repository 在基本功能上有额外的定义:

  • 状态管理,只更新变化的字段;
  • 支持使用导航属性、多表查询、级联加载、级联保存;
  • 动态实体类型的 CRUD;
  • 过滤器;

后续文章将对 FreeSql.Repository 功能逐一展开解释。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 理解仓储
  • 仓储功能
  • FreeSql.Repository
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档