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("表名")】
創建索引特性
插入
幾種插入方法
100w條數據插入只要3.8s
擴展一下,java采用LOAD DATA插入 100 萬條數據還約 8.9 秒,可以說C#性能nb
修改
??