做一个网站 如何盈利模式,WordPress首页做成插件,建设工程质量协会网站,爱在发烧 wordpress.NET开源 ORM 框架 SqlSugar 系列
【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 #x1f… .NET开源 ORM 框架 SqlSugar 系列
【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 Code First 代码优先数据迁移索引 DbFirst数据库优先是Entity FrameworkEF中的一种开发模式其核心思想是先创建数据库然后根据数据库的结构生成对应的实体类和数据访问代码。DbFirst模式适用于已经存在一个成熟的数据库例如从旧系统迁移过来的数据库或者数据库由专业的数据库管理员设计好开发人员需要基于这个数据库来构建应用程序的情况。当然了站在巨人的肩膀上很多国产的ORM框架自出道也拥有该技能。 优点和缺点
优点 灵活性DbFirst 模式允许开发人员利用现有的数据库结构减少重复工作。 成熟度适用于已有成熟数据库的情况可以快速启动项目。 可维护性由于数据库结构已经存在维护和修改数据库结构时更为方便。
缺点 依赖性依赖于现有的数据库结构可能无法完全满足业务需求的变化。 灵活性差在敏捷开发环境中可能需要频繁调整数据库结构这可能会影响开发效率。 01. 代码快捷生成实体
✔️优点所有数据库都支持
只能满足常规要求个性化太高的用 234方案
1. 代码生成实体到指定目录
//.net6以下
db.DbFirst.IsCreateAttribute().CreateClassFile(c:\\Demo\\1, Models);//.net6以上 string加?
db.DbFirst.IsCreateAttribute().StringNullable().CreateClassFile(c:\\Demo\\1, Models);//参数1路径 参数2命名空间
//IsCreateAttribute 代表生成SqlSugar特性
新功能1: 格式化文件名
db.DbFirst.FormatFileName(x x.ToLower()).CreateClassFile(c\\);
//格式化类名和字段名 看标题6
新功能2: NET 7 字符串是否需要?设置
db.DbFirst.StringNullable().CreateClassFile(c\\);//强制可以空类型string加上
2. 生成实体并且带有筛选 db.DbFirst.Where(Student).CreateClassFile(c:\\Demo\\2, Models);
db.DbFirst.Where(it it.ToLower().StartsWith(view)).CreateClassFile(c:\\Demo\\3, Models);
db.DbFirst.Where(it it.ToLower().StartsWith(view)).CreateClassFile(c:\\Demo\\4, Models);
3. 生成带有SqlSugar特性的实体
db.DbFirst.IsCreateAttribute().CreateClassFile(c:\\Demo\\5, Models);
4.生成实体带有默认值
db.DbFirst.IsCreateDefaultValue().CreateClassFile(c:\\Demo\\6, Demo.Models);//5.1.4.108-preview12 支持了替换字符串db.DbFirst.Where(Student).CreatedReplaceClassString(itit.Replace(xxx,yyy))// 也可以用正则 Regex.Replace.CreateClassFile(c:\\Demo\\2, Models);
5.自定义格式化功能
添加 SettingPropertyTemplate 重载加强自定义属性的定义功能 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})];Liststring attributes new Liststring();if (columns.IsPrimarykey)attributes.Add(IsPrimaryKeytrue);if (columns.IsIdentity)attributes.Add(IsIdentitytrue);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); 注意该功能可能和 IsCreateAttribute 存在冲突一般不要一起使用
6.格式化类名和属性名
新功能5.1.4.115
注意FormatFileName(itit.Replace( ,).Replace(-,_)) 要写成链式的只能一个。 db.DbFirst.IsCreateAttribute()//创建sqlsugar自带特性.FormatFileName(it File_ it) //格式化文件名文件名和表名不一样情况.FormatClassName(it Class_ it)//格式化类名 类名和表名不一样的情况.FormatPropertyName(it Property_ it)//格式化属性名 属性名和字段名不一样情况.CreateClassFile(c:\\Demo\\4, Models);//注意只能写一个//正确
FormatFileName(itit.Replace( ,).Replace(-,_)) //错误
.FormatFileName(itit.Replace( ,))
.FormatFileName(itit.Replace(-,_))
7. 替换生成后的 ClassString 注意这个替换性能损耗最大能用其他功能替换优先其他功能替换
//5.1.4.108-preview12 支持了替换字符串db.DbFirst.Where(Student).CreatedReplaceClassString(itit.Replace(xxx,yyy))//也可以用正则 Regex.Replace.CreateClassFile(c:\\Demo\\2, Models);
8.添加租户
db.DbFirst.Where(order).SettingClassDescriptionTemplate(it {return it\r\n [Tenant(\db.CurrentConnectionConfig.ConfigId\)];}).CreateClassFile(c:\\Demo\\1, Models);
9. 生成String? .NET 7
db.DbFirst.StringNullable().CreateClassFile(c\\);//强制可以空类型string加上
02. 代码Razor 模版生成
1.使用用例 SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){ConnectionString Config.ConnectionString,DbType DbType.SqlServer,IsAutoCloseConnection true,ConfigureExternalServices new ConfigureExternalServices(){RazorService new RazorService()//新建一个RazorService类 }});var templte RazorFirst.DefaultRazorClassTemplate;//这个是自带的这个模版可以修改db.DbFirst.UseRazorAnalysis(templte).CreateClassFile(c:\\Demo\\Razor\\);
RazorService 类在 framework和 .net Core 中小有区别看下面例子
2. net framework
创建 RazorService 需要安装 RazorEngine 3.10.0.0
using RazorEngine;
using RazorEngine.Templating;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace SqlSugar.DbFirstExtensions
{public class RazorService : IRazorService{public ListKeyValuePairstring,string GetClassStringList(string razorTemplate, ListRazorTableInfo model){if (model ! null model.Any()){var result new ListKeyValuePairstring, string();foreach (var item in model){try{item.ClassName item.DbTableName;//格式化类名string key RazorService.GetClassStringList razorTemplate.Length;var classString Engine.Razor.RunCompile(razorTemplate, key, item.GetType(), item);result.Add(new KeyValuePairstring,string(item.ClassName,classString));}catch (Exception ex){new Exception(item.DbTableName error . ex.Message);}}return result;}else{return new ListKeyValuePairstring, string ();}}}
}
3. net core |.net5 | .net6
创建 RazorService 需要安装 RazorEngine.NetCore 3.1
using RazorEngine;
using RazorEngine.Templating;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;namespace DbFirstRazorTest
{class Program{static void Main(string[] args){SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){ConnectionString server.;uidsa;pwdsasa;databaseSQLSUGAR4XTEST,DbType DbType.SqlServer,IsAutoCloseConnection true,ConfigureExternalServices new ConfigureExternalServices(){RazorService new RazorService()}});db.DbFirst.UseRazorAnalysis(RazorFirst.DefaultRazorClassTemplate).CreateClassFile(c:\\Demo\\Razor\\);}}public class RazorService : IRazorService{public ListKeyValuePairstring, string GetClassStringList(string razorTemplate, ListRazorTableInfo model){if (model ! null model.Any()){var result new ListKeyValuePairstring, string();foreach (var item in model){try{item.ClassName item.DbTableName;//格式化类名string key RazorService.GetClassStringList razorTemplate.Length;var classString Engine.Razor.RunCompile(razorTemplate, key, item.GetType(), item);result.Add(new KeyValuePairstring, string(item.ClassName, classString));}catch (Exception ex){new Exception(item.DbTableName error . ex.Message);}}return result;}else{return new ListKeyValuePairstring, string();}}}
}
03. 工具ReZero生成实体
缺点只支持常用数据库 SqlServer、MySql、 Pgsql 、Oracle、Sqlite、达梦 和 金仓默认模式我觉着这不算啥缺点了该有的都有了。
优点: 界面操作 、修改模版方便
.NET 新代码生成器 ReZero.API - .NET 新代码生成器 - .NET果糖网
04. 获取表和列信息
下面方法可以拿到表信息用途还是蛮多的。
//例1 获取所有表
var tables db.DbMaintenance.GetTableInfoList(false);//true 走缓存 false不走缓存
foreach (var table in tables)
{Console.WriteLine(table.Description);//输出表信息
}
下面方法可以拿到列信息用途还是蛮多的。 db.DbMaintenance.GetColumnInfosByTableName(表名, false)