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 ...
随机推荐
- Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
Jenkins Pipeline SSH Publisher 环境变量.参数引用 要用双引号 在 Pipeline 脚本中,如果要使用变量,就必须使用 " 双引号 pipeline { ag ...
- Bug定级实例
*1级,**系统崩溃* *定义:*严重阻碍测试和开发工作 *对应**优先级**:**最高* *具体可分为:* 1.功能完全没有实现 2.应用闪退/崩溃无法运行 3*.应用必现安全模式,无法运行* 4. ...
- 原创内容屡屡被盗?从源头对资源盗用说NO
在这个信息化的时代,资源被盗用是一件很让人厌恶,但又很常见的事.比如,之前郭敬明的小说<梦里花落知多少>剽窃庄羽小说<圈里圈外>一事,虽然郭敬明通过个人微博向庄羽道歉,并表示& ...
- 【Logging 日志库】Cpp 日志库 boost::log 以及 glog 的对比
日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.本文将从设计上和功能上对比 C++ 语言常见的两款日志库: boost::log 和 google-glog . 设计 b ...
- Codeforces 1092C Prefixes and Suffixes【字符串+思维】
题目链接:点这里 题意:理解错了题意导致WA好几发,QAQ暴击 题意是判断给你的2*n-2个字符串是前缀还是后缀,不是判断这个字符串的内容...我真的欲哭无泪,理解能力太菜了 思路:将两个n-1长的字 ...
- 五、java操作swift对象存储(官网样例)
系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...
- 编译busybox错误汇总
提示错误: arm-linux-gcc:Command not found PATH里有/usr/oca/arm/bin,但是make的时候,就是找不到 arm-linux-gcc 原因: ex ...
- 新手学习VUE——环境搭建及创建项目
第一种方式: 1. 下载安装node.js 检查是否成功:node-v或npm-v 2..搭建项目: 第一种方法:用iview脚手架建项目 打开iview官网==>生态 ===>i ...
- P1216-DP【橙】
在这道题中,我第一次用了memset,确实方便,不过需要注意的是只有全部赋值-1和0的时候才能使用它,否则他能干出吓死人的事.以及memset在cstring头文件里,在本地就算不include也能照 ...
- The container name "/nacos" is already in use by container
转载请注明出处: 服务器上使用docker 安装启动 nacos 的时候,报 The container name "/nacos" is already in use by co ...