FreeSql介绍

FreeSql是一款功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+、Xamarin,国产首个支持 AOT 发布的 ORM

1.  多场景实现

CodeFirst/DbFirst/DbContext/Repository/UnitOfWork/AOP/

支持.NETCore 2.1+,.NETFramework 4.0+,AOT,Xamarin

2.  多数据库支持(常用的数据库以注明颜色)

Mysql、SqlServer、PostgreSQL、Oracle、Sqlite3 ,Firebird

达梦、人大金仓、南大通用、虚谷、瀚高、ClickHouse、

QuestDB、Access 等数据库

3.  特性

DbFirst:支持DbFirst模式,支持从数据库导入实体类、或者使用实体类工具生成实体类

丰富的表达式函数:支持丰富的表达式函数,以及灵活的自定义解析;

读写分离: 支持读写分离 分表分库 过滤器 租户设计

导航属性: 支持一对多 多对多贪婪加载、已及延时加载

异步同步:支持同步/异步数据库操作方法,丰富多彩的链式查询方法

CodeFirst: 支持 CodeFirst 迁移

采用 ExpressionTree 高性能读取数据

注:文档总结略有不足 可查看官方文档

FreeSql 官方文档

______                     ____           __
   / ____/ ____  ___  ___   / __/ ___ _   / /
  / __/   / __/ / -_)/ -_) _\ \  / _ `/  / /
 /_/     /_/    \__/ \__/ /___/  \_, / /_/
                                      /_/

下载与使用

FreeSql使用方法

下载两个nuget包

FreeSql 下载最新版就行了

Freesql.Provider.(mysql/splserver/postgreSQL) 支持任何数据库 需要哪个用哪个

FreeSql(ORM框架)_Freesql

2.建一个实体类

这个引用需要 手动输入 using FreeSql.DataAnnotations;

表名 [Table(Name="XXX")]

主键 [Column(IsIdentity = true, IsPrimary = true)]

IsPrimary =主键 IsIdentity =是否自增

FreeSql(ORM框架)_Freesql_02

3.  Program.cs

数据库是PostgreSQL

CodeFirst

FreeSql(ORM框架)_Freesql_03

各种数据库连接字符串实例

FreeSql(ORM框架)_Freesql_04


1.这段代码定义了一个函数,它可以根据提供的 IServiceProvider 创建一个 IFreeSql 实例,用于与 PostgreSQL 数据库进行交互,并具有 SQL 命令监听和自动同步实体结构到数据库的功能。这个函数通常用于依赖注入容器中,以便在应用程序的不同部分共享和重用数据库连接和配置。


2.用于实现控制反转(Inversion of Control,简称IoC),以减少代码之间的耦合度,提高代码的可测试性和可维护性


3.确保在应用程序启动时执行。这样做的好处是,每当应用程序启动时,都会检查并更新数据库结构,以匹配当前的实体类定义(注: 这是CodeFirst优先 如果是DbFirst优先了解下面代码)

FreeSql(ORM框架)_Freesql_05


4.增删改查方法(这是封装的方法)

ExecuteAffrows() 这个方法一般使用在 (增(Insert) 删(Delete) 改(Update))

常用执行SQL命令 并返回受影响行数 

FreeSql(ORM框架)_Freesql_06

public interface ISetRepository<T> where T : class,new()
    {
        Task<T> GetAsync(Expression<Func<T, bool>> expression);
        Task<int> CreateAsync(T entity);
        Task<int> DeleteAsync(int id);
        Task<int> DeleteAllAsync(string ids);
        Task<int> UpdateLocality(Expression<Func<T, bool>> expression, Expression<Func<T, bool>> result);
        Task<int> UpdateInfo(T entity);
    }

具体实现

FreeSql(ORM框架)_Freesql_07

public class SetBaseRepository<T> : ISetRepository<T> where T : class, new()
    {
        private readonly IFreeSql freeSql;

        public SetBaseRepository(IFreeSql freeSql)
        {
            this.freeSql = freeSql;
        }
        /// <summary>
        /// 添加方法(异步)
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<int> CreateAsync(T entity)
        {
            return await freeSql.Insert(entity).ExecuteAffrowsAsync();
        }
        /// <summary>
        /// 添加方法(异步)
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<int> DeleteAllAsync(string ids)
        {
            var id = ids.Split(',');
            foreach (var item in id)
            {
                await freeSql.Delete<T>(Convert.ToInt32(item)).ExecuteAffrowsAsync();
            }
            return 1;
        }
        /// <summary>
        /// 删除方法
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<int> DeleteAsync(int id)
        {
            return await freeSql.Delete<T>(id).ExecuteAffrowsAsync();
        }
        /// <summary>
        /// 返回数据
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public async Task<T> GetAsync(Expression<Func<T, bool>> expression)
        {
            return await freeSql.Select<T>().Where(expression).FirstAsync();
        }
        /// <summary>
        /// 修改方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<int> UpdateInfo(T entity)
        {
            var list = freeSql.GetRepository<T>();
            return await list.UpdateAsync(entity);
        }
        /// <summary>
        /// 修改以及局部修改
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public async Task<int> UpdateLocality(Expression<Func<T, bool>> expression, Expression<Func<T, bool>> result)
        {
            return await freeSql.Update<T>().Where(expression).Set(result).ExecuteAffrowsAsync();
        }   
    }

转载自:https://blog.51cto.com/u_16904191/11479736