SqlSugar实体
1、实体使用自带特性
1.1 使用用例
对于 CRUD来说只需要配置主键和自增列就行了 ,如果类的名称和数据库不一样可以设置数据库中的名称
主键自增
[SugarTable("dbstudent")]//当和数据库名称不一样可以设置表别名 指定表明public class Student{    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//数据库是自增才配自增     public int Id { get; set; }    public int? SchoolId { get; set; }    [SugarColumn(ColumnName ="StudentName")]//数据库与实体不一样设置列名     public string Name { get; set; }} | 
双主键、复合主键、联合主键、多个主键
表中字段 如果是自增需要加上 IsIdentity,否则不需要
public class Student{    [SugarColumn(IsPrimaryKey = true)] //设置主键    public Guid  Pk1{ get; set; }    [SugarColumn(IsPrimaryKey = true)] //设置主键    public Guid  Pk2{ get; set; }    public string Name { get; set; }} | 
无主键
当表中无主键的时候更新和删除,需要指定条件,具体用法看文档
public class Student{    public Guid  Id{ get; set; }    public string Name { get; set; }} | 
总结:只需要针对数据库中的 自增和主键进行设置即可,和数据库一致
1.2 特性明细
下面是CRUD用到的特性,不包含建表的属性 (建表看文档【迁移】)
| 
 IsIdentity  | 
 自增列 如果是Oracle请设置OracleSequenceName 设置后和自增一样使用  | 
| IsPrimaryKey | 创建主键 | 
| ColumnName | 实体类数据库列名不一样设置数据库列名 | 
| IsIgnore | 
 IsIgnore=true表示 ORM 所有操作不处理这列 一般用于数据库没有这一列 ORM 非数据库列加上该特性(配置导航查询自动IsIgnore=true)  | 
| IsOnlyIgnoreInsert | 插入操作时不处理该列 【插入中忽略】 对数据库默认值有效 | 
| IsOnlyIgnoreUpdate | 
 更新操作不处理该列 【更新中忽略】  | 
| InsertServerTime | 插入操作:true数据库时间 | 
| UpdateServerTime | 更新操作:true数据库时间 | 
| InsertSql | 
 插入根据SQL 等于"0"插入0 等 于"'a'" 插入a 等于 "newid()" 插入newid()  | 
| UpdateSql | 
 更新根据SQL 等于"0"更新0 等 于"'a'" 更新a 等于 "newid()" 更新newid()  | 
| 
 QuerySql 5.1.4.128+  | 
 用于单表查询在没有使用Select下根据Sql生成 例如等于" Cast( Num_float64 as varchar(500))" 生成的Sql : Cast( Num_float64 as varchar(500)) AS Num_float64 一般用于orm驱动不支持的类型并且自定义类型也失效的情况 只在单表查询,不使用Select的情况下才生效 注意: 联表或者SELECT使用 函数或者扩展函数实现  | 
| OracleSequenceName | 设置Oracle序列,设置后该列等同于自增列 | 
| MaxParameterNameLength | 一般等于30,用于处理Oracle11 :参数化名字和索引名字超过30 | 
建表看文档【迁移】,这边只介绍CRUD用到的属性
2、实体使用自定义特性
下面是实现自定义特性的例子
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){    ConnectionString = Config.ConnectionString,    DbType = DbType.SqlServer,    IsAutoCloseConnection = true,    ConfigureExternalServices = new ConfigureExternalServices()    {        EntityService = (property, column) =>        {            var attributes = property.GetCustomAttributes(true);//get all attributes             if (attributes.Any(it => it is KeyAttribute))// by attribute set primarykey            {                column.IsPrimarykey = true; //有哪些特性可以看 1.2 特性明细            }            //可以写多个,这边可以断点调试            // if (attributes.Any(it => it is NotMappedAttribute))            //{                //    column.IsIgnore= true;              //}        },        EntityNameService = (type, entity) =>        {            var attributes = type.GetCustomAttributes(true);            if (attributes.Any(it => it is TableAttribute))            {                entity.DbTableName = (attributes.First(it => it is TableAttribute) as TableAttribute).Name;            }        }    }});[Table("student")]//[SugarTable("student")]public class MyStudent{    [Key]    //[SugarColumn(IsPrimaryKey =true)]    public string Id { get; set; }    public string Name { get; set; }} | 
该功能非常强大远不止这点用法,可以统一处理一些特性逻辑
分享你们的自定义特性实现:
1、方便其它人使用
2、方便自已使用
分享地址: http://www.donet5.com/Ask/9/11065
3、实体不使用特性
3.1 无封装写法
根据规则来设置哪个是主键,哪个是自增,这样就不需要在实体加特性了(SqlSugar只需主键和自增就可以完成所有操作)
var db= new SqlSugarClient(new ConnectionConfig(){ DbType = SqlSugar.DbType.MySql, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true, ConfigureExternalServices=new ConfigureExternalServices() {    EntityService = (t, column) =>     {        if (column.PropertyName.ToLower() == "id") //是id的设为主键        {            column.IsPrimarykey = true;            if (column.PropertyInfo.PropertyType == typeof(int)) //是id并且是int的是自增            {                column.IsIdentity = true;            }        }    }    ,    EntityNameService = (type, entity) =>     {      //entity.DbTableName 修改表名     }}});//根据你自个的逻辑去设置相应的主键和自增,也可以从数据库读出主键和自增来动态设置//db.DbMaintenance.GetColumnInfosByTableName 可以拿到表的信息 | 
3.2 语法糖(5.1.45)
如果大量if else比较难看所以针对指定表进行了一些封
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){    DbType = DbType.SqlServer,    ConnectionString = Config.ConnectionString3,    InitKeyType = InitKeyType.Attribute,    IsAutoCloseConnection = true,    ConfigureExternalServices = new ConfigureExternalServices()    {        EntityService = (s, p) =>        {            //如果是Order实体进行相关配置            p.IfTable<Order>()            .UpdateProperty(it => it.id, it =>            {                it.IsIdentity = true;                it.IsPrimarykey = true;            })            .UpdateProperty(it => it.Name, it => {                it.Length = 100;                it.IsNullable = true;            })            .OneToOne(it => it.Item, nameof(Order.ItemId));                         //如果Custom实体进行相关配置             p.IfTable<Custom>()             .UpdateProperty(it => it.id, it =>             {                it.IsIdentity = true;                it.IsPrimarykey = true;             })              .UpdateProperty(it => it.Text, it => {                it.DataType= StaticConfig.CodeFirst_BigString;//支持多库的MaxString用法              })                                                  //好处就是配置导航方便,和针对指定表设置会方便些            //可以结合全局逻辑一起使用,如果下面逻辑和上面有冲突,下面的会覆盖上面的                                       //统一设置 nullable等于isnullable=true             if(p.IsPrimaryKey==false&&new NullabilityInfoContext()                         .Create(c).WriteState is NullabilityState.Nullable)             {                           p.IsNullable = true;             }                                                  },        EntityNameService = (type, entity) =>        {           //entity.DbTableName 修改表名        }    }});//性能说明://EntityService 相同实体只会执行一次性不需太操作 | 
4、迁移-建表
public class CodeFirstTable1{        [SugarColumn(IsIdentity = true, IsPrimaryKey = true)]        public int Id { get; set; }         public string Name { get; set; }        //ColumnDataType 一般用于单个库数据库,如果多库不建议用        [SugarColumn(ColumnDataType = "Nvarchar(255)")]        public string Text { get; set; }        [SugarColumn(IsNullable = true)]//可以为NULL        public DateTime CreateTime { get; set; }}  //建表db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(CodeFirstTable1)); | 
SqlSugar实体的更多相关文章
- 基于SqlSugar的开发框架的循序渐进介绍(1)--框架基础类的设计和使用
		
在实际项目开发中,我们可能会碰到各种各样的项目环境,有些项目需要一个大而全的整体框架来支撑开发,有些中小项目这需要一些简单便捷的系统框架灵活开发.目前大型一点的框架,可以采用ABP或者ABP VNex ...
 - 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转
		
在前面随笔,我们介绍过这个基于SqlSugar的开发框架,我们区分Interface.Modal.Service三个目录来放置不同的内容,其中Modal是SqlSugar的映射实体,Interface ...
 - 基于SqlSugar的开发框架循序渐进介绍(8)-- 在基类函数封装实现用户操作日志记录
		
在我们对数据进行重要修改调整的时候,往往需要跟踪记录好用户操作日志.一般来说,如对重要表记录的插入.修改.删除都需要记录下来,由于用户操作日志会带来一定的额外消耗,因此我们通过配置的方式来决定记录那些 ...
 - 基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换
		
有时候,为了给前端页面输出内容,有时候我们需要准备和数据库不一样的实体信息,因为数据库可能记录的是一些引用的ID或者特殊字符,那么我们为了避免前端单独的进行转义处理,我们可以在后端进行统一的格式化后再 ...
 - T4 模板自动生成带注释的实体类文件 - 只需要一个 SqlSugar.dll
		
生成实体就是这么简单,只要建一个T4文件和 文件夹里面放一个DLL. 使用T4模板教程 步骤1 创建T4模板 ,一定要自已新建,把T4代码复制进去,好多人因为用我现成的T4报错(原因不明) 点击添加文 ...
 - 使用SqlSugar 4.X的T4生成实体类
		
<#@ template debug="false" hostspecific="true" language="C#" #> ...
 - .NET 开源SqlServer ORM框架  SqlSugar 3.0 API
		
3.1.x ,将作为3.X系统的最后一个版本,下面将会开发 全新的功能 更新列表:https://github.com/sunkaixuan/SqlSugar/releases 优点: SqlSuga ...
 - Dapper ORM  VS  SqlSugar ORM的 8场对决
		
CUP和.NET SQL版本不同也会存在少许差距,但不会有质变,下面的测试结果仅供参考 比赛规则 1.统一使用Realse版本的最新 DLL,Realse模式启用程序 2.为了平衡CPU和数据库空闲情 ...
 - Asp.Net 高性能ORM框架 SqlSugar.ORM 2.8
		
3.0最新API: http://www.cnblogs.com/sunkaixuan/p/5911334.html 1.前言/Preface SqlSugar从去年到现在已经一年了,版本从1.0升到 ...
 - ASP.NET -  SqlSugar ORM框架 更新列表
		
以后SqlSugar所有更新都会在这个贴子更新 SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSug ...
 
随机推荐
- Kubernetes(K8S) Deployment 拉取阿里云镜像部署
			
Docker Image 推到阿里云仓库,可以看 SpringBoot Docker 发布到 阿里仓库 1. 阿里镜像仓库加了授权,所以 K8S 拉之前要做下授权处理 [root@k8smaster ...
 - STM32CubeMX教程15 ADC - 多重ADC转换
			
1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK ...
 - 用Python学线性代数:概率密度函数拟合
			
问题 如果有一组数据,如何确定他们来自哪个统计分布? 从数据分析的角度,我们并不想要通过严格的统计方法去找到这个分布,Python中有一个可以自动拟合数据分析的库 -- distfit .这是一个py ...
 - DNS--主从
			
操作系统:centos7.8 DNS-master:192.168.198.128 DNS-slave:192.168.198.129 一 主从同步过程 master修改完成重启后 将传送notify ...
 - 【每日一题】20.K-th Number (二分 + 尺取)
			
关于此题,我们分析一下: 一个区间第k大的数不小于x的条件是什么? 答案就是一个区间内不小于x的数的个数不小于k 那么,我们就会发现,我们其实并不需要知道每个数的值,实际上对我们有用的只有每个数与x的 ...
 - 蓝桥杯历年省赛试题汇总 C/C++ B组
			
B组 省赛 部分 A组的题目可以在这里查看 → 刷题笔记: 蓝桥杯 题目提交网站:Here 2012 第三届 微生物增殖 古堡算式 海盗比酒量 奇怪的比赛 方阵旋转 大数乘法 放旗子 密码发生器 夺冠 ...
 - 一、Mycat实战---为什么要用mycat
			
系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 本 ...
 - spring-transaction源码分析(3)Transactional事务失效原因
			
问题概述 在Transactional方法中使用this方式调用另一个Transactional方法时,拦截器无法拦截到被调用方法,严重时会使事务失效. 类似以下代码: @Transactional ...
 - ONVIF网络摄像头(IPC)客户端开发—最简RTSP客户端实现
			
前言: 网上对于RTSP协议客户端的表述和实现非常不清晰,在实际使用中,FFMPEG和live555这些软件已经实现了RTSP客户端和服务端的所有功能,但是它们并没有将RTSP协议独立出来,通过看li ...
 - [转帖]python print如何格式化输出变量长度固定某个长度
			
https://zhuanlan.zhihu.com/p/595778735 在 Python 中,可以使用格式化字符串的方法来格式化输出变量. 例如,要将一个字符串变量 s 输出为 10 个字符长度 ...