FreeSQL

献给 Dapper 使用者的一份礼物

点点圈 提交于 2020-12-12 02:44:00
本文作者:FreeSql & CSRedis 本文链接:https://www.cnblogs.com/kellynic/p/14095502.html 1|0写在开头 众所周知 Dapper 是 .NET 下最轻最快的 ORM,它是喜欢写 SQL 码农的福音,相对于 SqlHelper 它更加方便,据统计 10个 .NETer 有 9个 用过 Dapper 。 由于 .NET 环境的特殊,对 Lambda 表达式树的喜爱,于是市面上有很多出现了基于 Dapper 的轻量级 ORM ,它们几乎都有共同特点,让 Dapper 支持 Lambda 表达式树,写起来顺畅如流水。 今天介绍一款本身功能已经很强大的 ORM ,他提供一个隐藏得比较深的 API 功能,使用起来和 Dapper 没什么两样。 2|0了解 Lambda 表达式树 这要先从 Lambda 表达式开始说起,词语中少了一个 树 字,差别甚大。 表达式,如下各种语法糖骚操作,产生的 IL 一模一样: //使用C# 2.0中的匿名方法获取字符串长度 Func< string , int > strLength = delegate ( string str) { return str.Length; }; Console.WriteLine(strLength( "Hello World!" )); /

FreeSql aop功能介绍

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-07 06:10:22
前言 FreeSql 是一个功能强大的 .NETStandard 库,用于对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.6.1+(QQ群:4336577)。 据了解,用户使用很少问问题,编码过程中,因业务阻塞,情有可原;因框架使用问题阻塞,得不偿失。我们的口号:做 .net 最方便的 ORM!愿每一位开发者嘴角上扬😏! 整体功能 IFreeSql 是核心,提供原始用法; FreeSql.DbContext 是扩展包,提供面向对象的用法(像EF); FreeSql.Repository 也是扩展包,提供仓储+工作单元用法(实际上和 DbContext 是一个扩展包); FreeSql.Connection.Extensions 也是扩展包,提供像 Dapper 一样的用法; 源码地址: https://github.com/2881099/FreeSql ,可从这里链向上面介绍的各个仓库。 fsql= new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;Pooling=true;Max Pool Size=10")

[开源] FreeSql AOP 功能模块

只愿长相守 提交于 2020-12-07 05:38:37
前言 FreeSql 是一个功能强大的 .NETStandard 库,用于对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.6.1+(QQ群:4336577)。 据了解,用户使用很少问问题,编码过程中,因业务阻塞,情有可原;因框架使用问题阻塞,得不偿失。我们的口号:做 .net 最方便的 ORM!愿每一位开发者嘴角上扬😏! 整体功能 IFreeSql 是核心,提供原始用法; FreeSql.DbContext 是扩展包,提供面向对象的用法(像EF); FreeSql.Repository 也是扩展包,提供仓储+工作单元用法(实际上和 DbContext 是一个扩展包); FreeSql.Connection.Extensions 也是扩展包,提供像 Dapper 一样的用法; 源码地址: https://github.com/2881099/FreeSql ,可从这里链向上面介绍的各个仓库。 fsql= new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;Pooling=true;Max Pool Size=10")

FreeSql (二十六)贪婪加载 Include、IncludeMany

别说谁变了你拦得住时间么 提交于 2020-12-06 18:49:12
1、导航属性 ManyToOne ManyToOne 导航属性通过 ToList() 加载,includeNestedMembers 参数说明: false: 返回 2级 Join 的数据; true: 返回所有层级深度 Join 的导航数据; Select<Tag>().Include(a => a.Parent).ToList(); Select<Tag>().Where(a => a.Parent.Name == "1").ToList(); //这样写,不需要再标记 Join,解析表达式时自动处理成 LeftJoin 2、导航属性 OneToMany/ManyToMany IncludeMany 贪婪加载集合的导航属性,其实是分两次查询,在 ToList 后进行了数据重装。 Select<Tag>().IncludeMany(a => a.Songs).ToList(); IncludeMany 有第二个参数,可以进行二次查询前的修饰工作。 Select<Tag>().IncludeMany(a => a.Songs, then => then.Where(song => song.User == "admin")).ToList(); 其实在 then 那里,还可以继续进行向下 Include/IncludeMany。只要你喜欢,向下 100 层都没问题。 3、变异

[LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询

一笑奈何 提交于 2020-11-22 07:48:28
此框架是Dapper的扩展,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架 支持.net framework4.5.1,.net core2.0及以上,更低版本适配如.netFramework4.0及以下请加群下载 支持Mssql,Oracle,Mysql等数据库 应用层需要引用包Kogel.Dapper.Extension.MsSql(如果数据库是Oracle则引用Kogel.Dapper.Extension.Oracle),Nuget上可以下载安装。 或者使用Nuget命令添加包 Install-Package Kogel.Dapper.Extension.MsSql   目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射 [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用 [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL [LINQ2Dapper]最完整Dapper To Linq框架(六)--

FreeSql (十)更新数据

瘦欲@ 提交于 2020-11-21 06:12:54
FreeSql支持丰富的更新数据方法,支持单条或批量更新,在特定的数据库执行还可以返回更新后的记录值。 var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10"; static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, connstr) .UseAutoSyncStructure(true) //自动同步实体结构到数据库 .Build(); //请务必定义成 Singleton 单例模式 [Table(Name = "tb_topic")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] public int Id { get; set; } public int Clicks { get; set; } public string Title { get; set; } public DateTime CreateTime { get; set

奉上简单的.Net后端开发模板

白昼怎懂夜的黑 提交于 2020-11-10 06:46:23
假定一个场景,开始做开发的你,领导走到你的面前说道:“小伙子,看了简历和最近的工作表现,很不错,现在交给一个任务,开发一个简单的CMS后端接口吧,前端有人配合你”,当时你内心读白:“CMS什么东西,还好我可以百度,但我要在哪个项目上开搞啊”,这时的领导又说道:“项目你自己建立,然后上传git就行了”,这时的你是否已经石化,本篇文章就为您提供一个快速建立后端开发的模板,作者自己总结出品,如有不妥,指正即可。 模板代码下载: https://github.com/cqhaibin/ApiTemplate.git 目标 由于搭建的只是后端开发模板,主需要满足基本要求即可。 框架结构简单 数据库支持:Mssql, Mysql 构架易于上手 支持良好的业务扩展 是一套基础开发模板 技术选型 开发语言:c# 运行时 .net Framework4.5 IoC:Autofac、Autofac.WebApi2 Dto:AutoMapper 序列化:Newtonsoft.Json Orm:FreeSql Api:Aspnet.WebApi 数据库:首先MSSQL、次先Mysql 缓存:基于List或Dictionary实现单机内存级缓存 架构分层 数据库访问层 Freesql实体定义,也就是我们常说的是数据库实体 提供dbContext上下文的方式访问 复杂的sql操作接口定义及实现,如:多表查询

2、FreeSql简单博客集成AutoMapper

可紊 提交于 2020-11-01 14:59:54
基础结构解释 UI-表现层-与控制器打交道(UI向Controller 传递数据时使用DTO(数据传输对象)) Service-应用服务层 Domain 领域对象 DTO 数据传输对象,一般只包含基础的Get,Set功能,也会包含一些数据验证,如必填项,大小,自定义规则等。 一个完整的业务是通过领域实体(对象)domain建立的,而DTO是根据UI的需求来设计的。 比如:Customer领域对象可能会包含一些诸如FirstName, LastName, Email, Address等信息。但如果UI上不打算显示Address的信息,那么CustomerDTO中也无需包含这个 Address的数据。 比如:User表设计字段如下:Id,UserName,Password,RegisterTime。注册时,那这个接口的参数应该只有UserName,Password,因为RegisterTime是后台赋值的,Id是数据库自动生成的。即设计一个RegisterDto,只包含UserName,Password二个字段,作为注册接口的参数。不然,那二个参数对于开发前端的人来说是无意义的,因为传递也没有效果。所以不应该暴露给前端使用。 以上即领域对象来实现业务,DTO只注重数据。 UI->Controller(通过 DTO完成数据传输,表单验证)->Service(操作Domain,完成业务服务

C# 数据操作系列

不问归期 提交于 2020-10-23 07:25:02
0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展。是的,没错。在实际开发中我们经常用Dapper作为对EF Core的补充。当然了Dapper并不仅仅只有这些,就让我们通过这一篇文章去让Dapper更像一个ORM吧。 1. Dapper Contrib Dapper Contrib 扩展了Dapper对于实体类的CRUD方法: 安装方法: 命令行: dotnet add package Dapper.Contrib NuGet: Install-Package Dapper.Contrib 使用: using Dapper.Contrib.Extensions; 这个是一个使得Dapper功能更强大的扩展包,因为支持了CRUD,所以需要对实体类添加配置,该扩展包使用Attribute作为依据进行相关映射配置: [Table("Model")] public class Model { [Key] [ExplicitKey] public int Id{get;set;} [Computed] public int Count {get;set;} [Write] public String Name{get;set;} } 这是所有的配置,Table用来声明是一个表,必须指定表名

手把手撸套框架-放弃SqlSugar转用FreeSql

三世轮回 提交于 2020-10-23 05:34:01
目录 在之前的随笔中:  1.1: ORM的选择  1.2: SqlSugar的搭建与避坑 分别有讲过SqlSugar 和 FreeSql,我最后选用了Sqlsugar,今天又写一遍,放弃SqlSugar 转用FreeSql。 起始,说起来有点啪啪打脸的意思, 但其实不是。 写第一篇 ORM的选择的时候 大约是两个月前,只是最近发到博客园。 当时的情况就是,急需一个ORM框架快速上手做开发,现在两个月过去了。我到新公司开发的第一个项目,也结束了。 虽然不算深度使用SqlSugar,但是 也算是 熟悉了。 确实对于新手刚入坑的来说,sqlsugar是最简单,容易上手的,但是用一段时间就会发现了 sqlsugar的短板还是比较明显。 第一,编写风格。 尤其是在连表查询的时候,sqlsugar 的风格老是感觉怪怪的: 对比,FreeSql 则用起来 舒爽很多: 第二: 稳定性 这里,Freesql 目前不算深度使用,但是写过一两个demo,感觉还是很不错。 但是Sqlsugar 在之前项目的使用中 有遇到过,Update 数据失败的问题,使用的是Oracle 数据库,用的是SimpleClient ,不是每张表都失败,有的表修改能成功。 这里我没有去详细排查 究竟是以为哪个字段有问题还是这么,后来为了避免这种问题,全部使用的 SqlSugarClient,同样的表