长沙科技网站设计哪家专业苏州网络seo

news/2025/9/26 22:12:21/文章来源:
长沙科技网站设计哪家专业,苏州网络seo,河南软件开发,企企业业网网站站建建设设目录FreeSql介绍FreeSql.GeneratorRazorEngine.NetCore源码解析FreeSql.ToolsFreeSqlFreeSql 是功能强大的对象关系映射技术(O/RM)#xff0c;支持 .NETCore 2.1 或 .NETFramework 4.0 或 Xamarin。有一个强大的ORM#xff0c;也方便我们开发一个代码生成器。一般情况下… 目录FreeSql介绍FreeSql.GeneratorRazorEngine.NetCore源码解析FreeSql.ToolsFreeSqlFreeSql 是功能强大的对象关系映射技术(O/RM)支持 .NETCore 2.1 或 .NETFramework 4.0 或 Xamarin。有一个强大的ORM也方便我们开发一个代码生成器。一般情况下我们开发数据库相关的应用主要分为三种code first、db first、model first我只用过前二种code first代码优先数据库都是根据实体类生成所有的关系可以是逻辑关联也可以是物理关联。DB First: 数据库优先直接设计表结构用设计工具生成表设计主键外键、索引关联关系等。当我们使用DB First时设计好的数据库我们怎么生成这些实体类、通用的代码、控制器、服务层、Dto呢。今天我来给大家介绍一下FreeSql项目中的一些工具。当然不使用此ORM的小伙伴也能使用此工具因为他是通用。FreeSql.Generator 命令行方式通过几行命令就可实现生成项目中通用的代码结构不需要复制一段代码后修改加快开发速度减少重复劳动少用一根头发。由于每个人的项目结构代码位置各不相同对于ORM来说不同的业务逻辑各不相同所以该项目没有相应的模板相信使用过Razor的同学一定能实现自己的模板。1-2年前我和一个学长也写过代码生成器这里分享一下当时做项目时的一些模板https://github.com/i542873057/SJNScaffolding/tree/master/SJNScaffolding.RazorPage/Templates,该项目是基于 . NET CoreRazor Page,由于已离职所以没有继续维护这些模板都和ABP相关当时提取了一些通用的功能单表操作可以直接生成前后端功能只需要在word中按统一的格式写好数据字典的文档直接复制到系统即可根据空格定义类型等方式解析字段。回到FreeSql.Generator 命令行对于此工具的使用可参考 https://github.com/dotnetcore/FreeSql/wiki/DbFirst源码位置 https://github.com/dotnetcore/FreeSql/tree/master/Extensions/FreeSql.Generator前提是本地安装了.net core 3.1 的sdk.怎么使用呢。安装 dotnet-tool 生成实体类dotnet tool install -g FreeSql.Generator 新建目录在地址栏输入 cmd 快速打开命令窗口输入命令FreeSql.Generator --help 我们可以看到C:\Users\igeekfan\Desktop\codeFreeSql.Generator --help____ ____ __/ __/ ____ ___ ___ / __/ ___ _ / // _/ / __// -_)/ -_) _\ \ / _ / / //_/ /_/ \__/ \__/ /___/ \_, / /_//_/# Github # https://github.com/2881099/FreeSql v1.5.0使用 FreeSql 快速生成数据库的实体类更新工具dotnet tool update -g FreeSql.Generator# 快速开始 # FreeSql.Generator -Razor 1 -NameOptions 0,0,0,0 -NameSpace MyProject -DB MySql,Data Source127.0.0.1;...-Razor 1 * 选择模板实体类特性-Razor 2 * 选择模板实体类特性导航属性-Razor d:\diy.cshtml * 自定义模板文件-NameOptions * 总共4个布尔值分别对应# 首字母大写# 首字母大写,其他小写# 全部小写# 下划线转驼峰-NameSpace * 命名空间-DB MySql,Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;Initial Catalog数据库;Charsetutf8;SslModenone;Max pool size2-DB SqlServer,Data Source.;Integrated SecurityTrue;Initial Catalog数据库;Poolingtrue;Max Pool Size2-DB PostgreSQL,Host192.168.164.10;Port5432;Usernamepostgres;Password123456;Database数据库;Poolingtrue;Maximum Pool Size2-DB Oracle,user iduser1;password123456;data source//127.0.0.1:1521/XE;Poolingtrue;Max Pool Size2-DB Sqlite,Data Sourcedocument.db-DB Dameng,server127.0.0.1;port5236;user id2user;password123456789;database2user;poolsize2Dameng 是国产达梦数据库-Filter TableViewStoreProcedure默认生成表视图存储过程如果不想生成视图和存储过程 -Filter ViewStoreProcedure-Match 正则表达式只生成匹配的表如dbo\.TB_.-FileName 文件名默认{name}.cs-Output 保存路径默认为当前 shell 所在目录推荐在实体类目录创建 gen.bat双击它重新所有实体类 更新命令行dotnet tool update -g FreeSql.Generator 这里lin-cms-dotnetcore这个项目来测试。数据库表名是下划线字段也是下划线方式。-Razor 指定 第一个模板-NameOptions 0,0,0,1 最后一个1代表 下划线转驼峰满足C#命名规则-NameSpace 指定了命名空间 LinCms.Core.Entities-DB 就是数据库的相关配置mysql 本地地址 127.0.0.1 3306端口 用户名 root 密码123456 数据库 lin-cms-Match book 这样就能只生成book支持正则表达式如 -Math lin_user 就会生成以lin_user开头的表。如dbo.TB_.会生成以TB开头的表。即只生成匹配的表执行此命令。FreeSql.Generator -Razor 1 -NameOptions 0,0,0,1 -NameSpace LinCms.Core.Entities -DB MySql,Data Source127.0.0.1;Port3306;User IDroot;Password123456;Initial Cataloglincms;Charsetutf8;SslModenone;Max pool size2 这时候代码已经生成了其中一个代码 生成如下。这些类是partial 熟悉C#的同学应该知道类的定义使用此关键字我们能在不同的地方为该类扩展。以防止重新同步数据库的结构时丢失改动的字段。namespace LinCms.Core.Entities {[JsonObject(MemberSerialization.OptIn), Table(Name book)]public partial class Book {/// summary/// 主键Id/// /summary[JsonProperty, Column(Name id, IsPrimary true, IsIdentity true)]public long Id { get; set; }[JsonProperty, Column(Name author, DbType varchar(20))]public string Author { get; set; } string.Empty;[JsonProperty, Column(Name image, DbType varchar(50))]public string Image { get; set; } string.Empty;//更多xxx}}最终效果图如下此时会生成二个文件 __重新生成.bat,下次重新点击他就能重新生成实体类了。FreeSql.Generator -Razor __razor.cshtml.txt -NameOptions 1,1,0,1 -NameSpace MyProject -DB MySql,Data Source127.0.0.1;Port3306;User IDroot;Password123456;Initial Cataloglincms;Charsetutf8;SslModenone;Max pool size2 -FileName {name}.cs 上面的命令-Razor 指定了这个txt文件 __razor.cshtml.txt我们可以定义自己的模板以生成符合自已业务的的代码从而实现快速开发。我们可以看下模板中的文件内容,他就是asp.net下的mvc 结构下的razor后端模板渲染,把这个.txt后缀去掉就很明了了。对于asp.net mvc的razor我们可以将控制器下方法的值替换掉cshtml中的值。这个过程是有一个类库在帮我们实现的,叫RazorEngine不过那个是.net framework下的实践。.NET Framework 下的RazorEngine代码生成介绍using FreeSql.DatabaseModel;{ var gen Model as RazorModel;Funcstring, string GetAttributeString attr {if (string.IsNullOrEmpty(attr)) return null;return string.Concat(, , attr.Trim([, ])); }; FuncDbColumnInfo, string GetDefaultValue col {if (col.CsType typeof(string)) return string.Empty;;return ; }; } //xxx namespace gen.NameSpace {if (string.IsNullOrEmpty(gen.table.Comment) false) {:/// summary:/// gen.table.Comment.Replace(\r\n, \n).Replace(\n, \r\n /// ):/// /summary }[JsonObject(MemberSerialization.OptIn)GetAttributeString(gen.GetTableAttribute())]public partial class gen.GetCsName(gen.FullTableName) {foreach (var col in gen.columns) {if (string.IsNullOrEmpty(col.Coment) false) {:/// summary:/// col.Coment.Replace(\r\n, \n).Replace(\n, \r\n /// ):/// /summary}:([JsonProperty GetAttributeString(gen.GetColumnAttribute(col)) ]):public gen.GetCsType(col) gen.GetCsName(col.Name) { get; set; }GetDefaultValue(col) :}} gen.GetMySqlEnumSetDefine() } RazorEngine.NetCore到了.NET Core时代我看了下FreeSql.Generator用的这个类库RazorEngine.NetCore实现动态操作cshtml生成需要的文本。Razor Engine是基于微软Razor解析的模板引擎它允许你使用Razor语法构建动态模板你只需要使用Engine的静态方法Engine.Razor.RunCompile等。创建一个控制台应用然后安装包。Install-Package RazorEngine.NetCore using RazorEngine; using RazorEngine.Templating; // For extension methods.string template Hello Model.Name, welcome to RazorEngine!; var result Engine.Razor.RunCompile(template, templateKey, null, new { Name World });Console.WriteLine(result); 输出如下内容Hello World, welcome to RazorEngine! 此处使用的RunCompile方法是扩展方法您需要引用RazorEngine.Templating命名空间。The templateKey 保持唯一值比如使用guid值。字符串并且你可以根据此字符串key重新运行缓存的模板。如果再次根据此key可使用原本的模板。var result Engine.Razor.Run(templateKey, null, new { Name Max }); 会输出如下内容Hello Max, welcome to RazorEngine! 上面中的RunCompile第三个参数传null,因为我们第四个参数使用的是匿名类根目录创建一个HelloWord.cshtml要选择属性-如果较新则复制 内容Hello Model.Name, welcome to RazorEngine! 控制台如下代码。string templateFilePath HelloWorld.cshtml; var templateFile File.ReadAllText(templateFilePath); string templateFileResult Engine.Razor.RunCompile(templateFile, Guid.NewGuid().ToString(), null, new {Name World });Console.WriteLine(templateFileResult); 控制台输出Hello World, welcome to RazorEngine! 使用强类型 CopyRightUserInfo.cs生成一个版权所有using System; namespace OvOv.Razor {public class CopyRightUserInfo{public string UserName { get; set; }public string EmailAddress { get; set; }public DateTime CreateTime { get; set; }public string FileRemark { get; set; }}} 根目录创建一个CopyRightTemplate.cshtml要选择属性-如果较新则复制 内容{var gen Model as OvOv.Razor.CopyRightUserInfo; } // // 创建人: gen.UserName // 创建时间: gen.CreateTime // 邮箱 gen.EmailAddress //控制台如下代码。string copyRightTemplatePath CopyRightTemplate.cshtml; var copyRightTemplate File.ReadAllText(copyRightTemplatePath); string copyRightResult Engine.Razor.RunCompile(copyRightTemplate, Guid.NewGuid().ToString(), typeof(CopyRightUserInfo), new CopyRightUserInfo {CreateTime DateTime.Now,EmailAddress 710277267qq.com,UserName IGeekFan }); Console.WriteLine(copyRightResult);Console.ReadKey(); 控制台输出// // 创建人: IGeekFan // 创建时间: 2020/6/23 18:14:08 // 邮箱 710277267qq.com // 全放到控制台下输出如下结果。代码生成器最重要的一点解决了我们就能实现自己的代码生成器先构建自己的模板实现输入命令行WPFWEB端及更多输出生成文件。以上源码已放到示例代码中 https://github.com/luoyunchong/dotnetcore-examples/blob/master/aspnetcore-freesql/OvOv.Razor/Program.cs源码解析首先这是一个控制台应用Main(string[] args)可接收多个参数。处理无参数--help处理args数组解析出所有的参数如果没有设置则为默认值。处理一些参数异常问题最重要的是根据-Razor选定对应的模板。ArgsRazor//根据-Razor 1 不是2 还是模板的路径取出的模板文本值。 var razorId Guid.NewGuid().ToString(N); RazorEngine.Engine.Razor.Compile(ArgsRazor, razorId); 根据数据库连接串取出参数过滤后的表视图存储过程循环数据库的表等model为模板中需要的数据razorId与上文的razorId相同sw为生成后的文本保存的值。var sw new StringWriter(); var model new RazorModel(fsql, ArgsNameSpace, ArgsNameOptions, tables, table); RazorEngine.Engine.Razor.Run(razorId, sw, null, model); 将sw字符串保存生成类.cs文件根据参数配置生成文件名另外生成一个__重新生成.bat,__razor.cshtml.txt方便后续用户重新生成实体类。FreeSql.Tools这是 FreeSql 衍生出来的辅助工具包内含生成器等功能作者mypeng1985 因为这个不兼容mac,linux,所以作者建议使用dotnet-tool 命令行工具生成实体类从而支持MAC/Linux系统。对于不是使用FreeSql的开发者也能使用此工具你只需要修改对应的模板即可。使用方式不多介绍。https://github.com/2881099/Freesql.tools分为WPF WinForm DSkin 版本套网页看了下代码底层生成代码逻辑也是用的RazorEngine .NET Framework 下的RazorEngine代码生成介绍预览图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加强网站建设 实施政务公开wordpress企业网站模板

使用背景和场景 业务中的某个关键服务,配置了多个replica,结果在部署时,发现多个相同的副本同时部署在同一个主机上,结果主机故障时,所有副本同时漂移了,导致服务间断性中断 基于以上背景,实现…

实用指南:《前端学习总结:GitLab、状态管理、组件库与 Umi.js》

实用指南:《前端学习总结:GitLab、状态管理、组件库与 Umi.js》pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

C#中,EXCEL与表列顺序完全一致情况的导入处理(BeginBinaryImport)

使用:BeginBinaryImport能快速的导入临时表//读取datagridview的值 private string GetCellValue(DataGridViewRow row, string columnName, string defaultValue = "0"){var value = row.Cells[columnName…

Gitee PPM:数据驱动的DevSecOps项目管理新范式

Gitee PPM:数据驱动的DevSecOps项目管理新范式 在数字化转型浪潮下,软件研发团队正面临项目管理效率的"三座大山"——需求与开发脱节、资源调配低效、风险响应滞后。Gitee PPM作为国内领先的DevSecOps平台…

acme.sh:强大的ACME协议Shell脚本,支持多DNS API

acme.sh是一个用Shell编写的ACME协议客户端,支持从Lets Encrypt、ZeroSSL等CA自动签发SSL证书。它提供了丰富的DNS API支持,可以轻松集成各种DNS服务商,实现证书的自动验证和续期,是自动化证书管理的理想工具。acm…

P9545 [湖北省选模拟 2023] 环山危路 / road 题解

显然可以看作竞赛图上的最大流,考虑转化为最小割。 令 \(S\) 为包含 \(s_1,s_2,\dots,s_k\) 但不包含 \(t_i\) 的点集,\(T=\{1,2,\dots,n\}\backslash S\),则代价为 \(\sum_{x\in S}\sum_{y\in T}v_{x,y}\),记为 \…

自适应网站建站价格asp网站后台管理系统源码

目录 一.本文基于上一篇文章keepalived环境来做的,主机信息如下 二.为两台虚拟机准备添加一块新硬盘设备 三.安装drbd9 1.使用扩展源的rpm包来下载 2.创建资源并挂载到新增的硬盘 3.主设备升级身份 4.主备两个设备手动切换身份演示 四.安装配置nfs 五.安装…

c语言经典课程资料

c语言经典课程资料 字节大佬终于把这套C语言教程整理成了动画片 https://www.bilibili.com/video/BV1NAtZeNEHf/?spm_id_from=333.1387.homepage.video_card.click

k8s 兼容寒武纪 - 教程

k8s 兼容寒武纪 - 教程2025-09-25 10:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

探秘圆周率 π:圆周率计算在线工具

# 探秘圆周率π:从基础定义到超级计算的无限魅力 在数学的浩瀚星空中,圆周率π无疑是一颗闪耀着独特光芒的恒星。它不仅是连接圆的周长与直径的关键桥梁,更是一个充满神秘色彩、引无数数学家为之倾倒的无理数。今天…

注意力机制下的位置编码的理解和梳理

注意力机制下的位置编码的理解和梳理位置编码的理解和梳理 引言 Transformer的悖论 自2017年横空出世以来,Transformer架构已然成为序列建模领域的一场革命,因其卓越的并行计算能力和捕捉全局依赖的强大性能而备受赞…

以史为鉴【长期置顶】

本文将记录我在OI中一些典型、极难察觉、犯过不止一次的细节或非细节错误,并作为唯一(大概率)置顶、长期置顶,以备随时查看。遇事不决先看看数组开小了没。对于一些需要判无解且多测的题目,一定要读完所有数据再判…

java21学习笔记-未命名的模式和变量 - 指南

java21学习笔记-未命名的模式和变量 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

石家庄网站建设外贸做网站建设的怎么拓展业务

135编辑器1李磊:磊,假期过的可好?有没有人在写作业呀?通过这段时间的学习,可以看得出你对我们的课程兴趣浓厚,尤其是scratch,自己做了好多的案例,之前还以为你们都是从网上直接下载的…

达梦数据库DM-查询指定模式下表的大小

需求:需要查一个模式下所有表的大小,以MB为单位: sql: SELECT * FROM (SELECT OWNER,TABLE_NAME,TABLE_USED_SPACE(OWNER,TABLE_NAME)*PAGE()/1024/1024.0 AS "MB"FROM SYS.ALL_TABLESWHERE OW…

【笔记】Prfer 序列

Prfer 序列和 Cayley 公式之前的版本 观前提示:可以用 alt+0252 打出来 这个字符喵 1. 对树建立 Prfer 序列 \(\rm Def.\) Prfer 序列的构建如下: 每次选择树中编号最小的叶节点并删去它,并在一个初始为空的序列末…

win11 无线投屏(Miracast:)引发的思考附带解决方案 - Popeye

这个功能想必大家使用的情况很多,比如平板或手机投屏到电脑上,实现多屏设备的统一管理。 就这个功能自己几次更新后,被系统给屏蔽了,并提示出了红色字体。静止使用。 一般出现这个问题后解决思路有以下几个方向 1.…

2025年十大主流项目管理工具评测:功能覆盖与成本效益分析

2025年项目管理工具市场正经历技术革新与功能升级的关键阶段,企业面临众多选择却难以快速匹配需求。本文从功能覆盖度、团队适配性、成本效益三大核心维度,横向评测禅道、Asana、Trello、Jira、ClickUp、Monday.com、…

关于服装店网站建设的策划方案温州seo公司

前言 在服务器的VMWARE ESXi系统环境中,我们经常需要创建虚拟机来运行各种应用程序。然而,服务器如果偶尔出现自动重启以及紫屏报错的问题,说明服务器内部出现了故障,一般情况下重启机器能够解决问题,但时间一长&…

完整教程:服务器磁盘空间满了怎么办?阿里云ECS清理与云盘扩容教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …