Sqlsugar补充自定义模板
DBFirst
默认创建所有实体
CreateClassFile()的第二个参数为生成实体类命名空间
//.net6以下
db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\1", "Models");
//.net6以上 string加?
db.DbFirst.IsCreateAttribute().StringNullable().CreateClassFile("c:\\Demo\\1", "Models");//参数1:路径 参数2:命名空间
//IsCreateAttribute 代表生成SqlSugar特性
生成所有实体且文件名小写(userentity.cs),用(UserEntity.cs多好)应该没人会用吧
db.DbFirst.FormatFileName(x => x.ToLower()).CreateClassFile("c\\yourPath");
如果数据库字段可空,生成实体加上"?",string?,int?,DateTime?
db.DbFirst.StringNullable().CreateClassFile("c\\");//强制可以空类型string加上?
按需创建实体
第二句,把表名先转成小写,再查看是否匹配,表里Snow->snow == "snow",生成的实体类还是以表名一样Snow{}
db.DbFirst.Where("Student").CreateClassFile("c:\\Demo\\2", "Models");
db.DbFirst.Where(it => it.ToLower().StartsWith("snow")).CreateClassFile("c:\\Demo\\3", "Models");
db.DbFirst.Where(it => it.ToLower().StartsWith("view")).CreateClassFile("c:\\Demo\\4", "Models");
数据库设置字段默认值就加上,例如public bool isDeleted {get;set;} = 0
自定义模版格式化
注意SettingPropertyTemplate可能和IsCreateAttribute存在冲突一般不要一起使用,因为这俩都是向实体类属性上添加特性的。
db.DbFirst.SettingClassTemplate(old => { return old;/*修改old值替换*/ })//类构造函数 .SettingConstructorTemplate(old =>{return old;/*修改old值替换*/ }).SettingNamespaceTemplate(old => {return old + "\r\nusing SqlSugar;"; //实体类追加引用SqlSugar,}).SettingPropertyDescriptionTemplate(old =>{ return old;/*修改old值替换*/}) //属性备注//属性:新重载 完全自定义用配置.SettingPropertyTemplate((columns,temp,type) => {var columnattribute = "\r\n [SugarColumn({0})]";List<string> attributes = new List<string>();if (columns.IsPrimarykey)attributes.Add("IsPrimaryKey=true");if (columns.IsIdentity)attributes.Add("IsIdentity=true");if (attributes.Count == 0) {columnattribute = "";}return temp.Replace("{PropertyType}", type).Replace("{PropertyName}", columns.DbColumnName).Replace("{SugarColumn}",string.Format(columnattribute,string.Join(",", attributes)));}).CreateClassFile("c:\\Demo\\7");
//[SettingClassTemplate]-------------自定义类模板(添加基类和接口)
db.DbFirst.SettingClassTemplate(old => {// 在默认类定义前添加继承和接口// 原模板格式类似: public class {ClassName} {{ ... }}return old.Replace("public class", "public class {ClassName} : BaseEntity, IEntity");})//[SettingConstructorTemplate]------------自定义构造函数模版
db.SettingConstructorTemplate(old =>
{// 提取类名(先去掉括号,再分割)string className = old.Split('(')[0].Split(' ')[1];// 生成构造函数return $@"public {className}() {{ }} // 无参构造函数public {className}(string name) {{//有参this.Name = name;}}";
})//[SettingNamespaceTemplate]--------------自定义命名空间模版
db.DbFirst.SettingNamespaceTemplate(old => {// 修改命名空间并添加所需引用return "namespace MyProject.Entities;\r\n" +"using System;\r\n" +"using SqlSugar;\r\n" +"using Newtonsoft.Json;";})//[SettingPropertyDescriptionTemplate]-------自定义注释
db.DbFirst.SettingPropertyDescriptionTemplate(old => {// 为属性添加XML注释return $@"/// <summary>/// {old} - 最后更新时间/// </summary>";}).CreateClassFile("C:\\EntityModels");//[SettingPropertyTemplat]
//SettingPropertyTemplate可能和IsCreateAttribute存在冲突一般不要一起使用,因为这俩都是向实体类属性上添加特性的
db.DbFirst.SettingPropertyTemplate((columns, temp, type) => {// 构建SugarColumn特性var columnAttr = "\r\n [SugarColumn({0})]";var attributes = new List<string>();// 添加主键标识if (columns.IsPrimarykey)attributes.Add("IsPrimaryKey = true");// 添加自增标识if (columns.IsIdentity)attributes.Add("IsIdentity = true");//假如你数据库列为user_name,SqlSugar生成的实体为UserName,这个时候就要进行列名映射// 添加列名映射(如果实体属性名与数据库列名不同)if (columns.DbColumnName != columns.PropertyName)attributes.Add($"ColumnName = \"{columns.DbColumnName}\"");// 添加忽略属性(如果需要)实体类Password属性上的就会添加特性[SugarColumn(IsIgnore = true)]if (columns.DbColumnName.ToLower() == "password")attributes.Add("IsIgnore = true");// 如果没有属性,清空特性if (attributes.Count == 0)columnAttr = "";// 处理可空类型/*columns.IsNullable:数据库字段设置为允许为NULLtype != "string":排除字符串类型(C# 中string本身就是可空的)!type.Contains("?"):确保类型还没有被处理为可空类型(避免重复添加?)*/var propertyType = type;if (columns.IsNullable && type != "string" && !type.Contains("?"))propertyType += "?";// 替换模板变量//这里做的是把上面的执行转换完成后生成实体属性/*按照格式生成 [SugarColumn(....)]public PropertyType PropertyName {get;set;},例如:[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }*/return temp.Replace("{PropertyType}", propertyType).Replace("{PropertyName}", columns.PropertyName).Replace("{SugarColumn}", string.Format(columnAttr, string.Join(",", attributes)));})
CodeFirst
特性介绍【SugarColumn】【SugarTable("表名")】