欢迎来到《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>
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 功能逐一展开解释。

系列文章导航

FreeSql.Repository (一)什么是仓储的更多相关文章

  1. FreeSql.Repository 通用仓储层功能

    前言 好多年前,DAL 作为数据库访问层,其实是非常流行的命名方式. 不知道从什么时候开始,仓储层成了新的时尚名词.目前了解到,许多人只要在项目中看见 DAL 就会觉得很 low,但是比较可笑的一点是 ...

  2. .NET ORM 仓储层必备的功能介绍之 FreeSql Repository 实现篇

    写在开头 2018年11月的某一天,头脑发热开启了 FreeSql 开源项目之旅,时间一晃已经四年多,当初从舒服区走向一个巨大的坑,回头一看后背一凉.四年时间从无到有,经历了数不清的日夜奋战(有人问我 ...

  3. .NETCore 下支持分表分库、读写分离的通用 Repository

    首先声明这篇文章不是标题党,我说的这个类库是 FreeSql.Repository,它作为扩展库现实了通用仓储层功能,接口规范参考 abp vnext 定义,实现了基础的仓储层(CURD). 安装 d ...

  4. FreeSql 新查询功能介绍

    FreeSql FreeSql 是一个功能强大的 NETStandard 库,用于对象关系映射程序(O/RM),提供了 CodeFirst/DbFirst/CURD/表达式函数/读写分离 等基础封装. ...

  5. FreeSql 过滤器使用介绍

    FreeSql.Repository 实现了过滤器,它不仅是查询时过滤,连删除/修改/插入时都会进行验证,避免数据安全问题. 过滤器 目前过滤器依附在仓储层实现,每个仓储实例都有 IDataFilte ...

  6. 非常贴心的轮子 FreeSql

    FreeSql 项目从2018年11月28日开发至今,版本已发布至 v0.3.12,版本规则:年数-月-日-当日版本号.目前主要包括 FreeSql.FreeSql.Repository 两个项目的维 ...

  7. FreeSql 如何实现 Sqlite 跨库查询

    FreeSql 是 .NetFramework 4.6+..NetCore 下的 ORM 功能库,提供了丰富的功能,支持五种流行数据库 MySql/SqlServer/PostgreSQL/Oracl ...

  8. FreeSql (一)入门

    FreeSql 是一个功能强大的对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.5+(QQ群:4336577) FreeSql采用MIT开源协议托管 ...

  9. FreeSql (三十一)分区分表

    分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中.把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,数据库不同实现方式有所不同. 与分表不同,一张大表进行 ...

随机推荐

  1. mon的稳定性问题

    MON的稳定性问题: mon的选举风暴影响客户端IO LevelDB的暴涨 频繁的客户端请求的DDOS mon选举风暴: monmap会因为mon之间或者mon与客户端之间网络的影响或者消息传递的异常 ...

  2. du查看的目录大小与df查看的大小不同的时候用lsof查找

    首先MAN一下两个命令,看一下解释的区别: du - estimate file space usage df - report file system disk space usage du估计文件 ...

  3. Python_Tips

    Python绝对路径与相对路径读写文件[上级目录: os.path.dirname(os.getcwd())] # coding:utf8 ''' 知识点:Python读写文件时候的相对路径与绝对路径 ...

  4. 批量反编译.class

    使用dj java Decompiler软件,安装后,安装目录会有个jad.exe程序 控制台执行: jad -o -r -dF:\output_dir -sjava F:\class_root_di ...

  5. 这个厉害了,ssm框架整合全过程,建议收藏起来好好看看

    1.0 环境要求 IDEA MySQL 5.7.19 Tomcat 9 Maven 3.6 1.1 数据库 创建书籍数据库表,包括书籍编号,书籍名称,书籍数量以及书籍描述. CREATE DATABA ...

  6. FL Studio通道乐器设置页详讲

    上一篇文章我们说到FL Studio通道乐器设置页每个标签页面中几乎都是由包络.低频振荡器和滤波器这三个部分组成.我们之前只对包络进行的简单的介绍,相信很多同学对它还有其他两个的功能的了解还是云里雾里 ...

  7. 理解与使用Treiber Stack

    目录 背景 名称由来 CompletableFuture源码实现 FutureTask实现 Treiber Stack抽象实现 入栈 出栈 示例 参考 背景 最近在很多JDK源码中都看到了Treibe ...

  8. git操作之四:git branch(本地仓库)

    前面,介绍了git init/add/commit/restore/reset等git命令,今天介绍下git branch,这个命令是和分支相关的.首先要理解什么是分支,简单来说在协作开发中,每个人开 ...

  9. 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)

    P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...

  10. Robot Framework安装和入门

    1:安装 python 安装python并且配置好环境变量 2:安装 Robot Framework pip install robotframework 3:安装GUI界面 pip install ...