当前位置: 首页 > news >正文

自己的电脑做服务器 并建网站php网站建设外国参考文献

自己的电脑做服务器 并建网站,php网站建设外国参考文献,爱站网为什么不能用了,网站开发美学FreeSql 是 .NET 开源生态下的 ORM 轮子#xff0c;在一些人眼里属于重复造轮子#xff1a;不看也罢。就像昨天有位朋友截图某培训直播发给我看#xff0c;内容为#xff1a;“FreeSQL#xff08;个人产品#xff09;#xff0c;自己玩可以#xff0c;不要商用。ORM框架… FreeSql 是 .NET 开源生态下的 ORM 轮子在一些人眼里属于重复造轮子不看也罢。就像昨天有位朋友截图某培训直播发给我看内容为“FreeSQL个人产品自己玩可以不要商用。ORM框架1.安全、稳定更新稳定、有BUG有人修复有人升级”。这突出其来的“关爱”让我的内心毫无波澜确实是毫无波澜比起当初 FreeSql 初出茅庐之时的讽刺友好得多。写在开头的这些内容并不祈求这部分人改变观念该黑的请继续黑黑总比没有关注好是吧我无所谓你但是别人呢麻烦你们不要无脑抨击你们这种行为不知道挽杀了多少社区项目。2018 年 12 月份开发 FreeSql 到现在1859 颗星412 Issues18 PR170K 包下载量。说明还是有开发者关注和喜爱只要有人关注就不会停更不修 BUG 一说。大家有兴趣可以看看更新记录看看我们的代码提交量4700 单元测试不说非常多我个人觉得已经超过很多国产项目有兴趣的再去隔壁“国产第一” ORM 上看看对比对比如果不更新了请把位置让出来如果有BUG修复不了请让 FreeSql 来如果不好用就不要搞一堆 SEO 害人入坑如果。。。如果。。。这不是挑衅看到对方的 issues 实在不忍看到对方的源码哇哦单元测试在哪里好了不废话了。。20个月了FreeSql 还活着而且生命力顽强见下图预告年底发布 2.0.0 版本将冻结新功能开发不再制造新 BUG一心修复老功能引出的 BUG完善文档。本文将介绍在过去的三个月完成的一些有意义的功能介绍。2|0入戏准备FreeSql 是 .Net ORM能支持 .NetFramework4.0、.NetCore、Xamarin、XAUI、Blazor、以及还有说不出来的运行平台因为代码绿色无依赖支持新平台非常简单。目前单元测试数量4700Nuget下载数量170K源码几乎每天都有提交。值得高兴的是 FreeSql 加入了 ncc 开源社区https://github.com/dotnetcore/FreeSql加入组织之后社区责任感更大需要更努力做好品质为开源社区出一份力。QQ群4336577(已满)、8578575(在线)为什么要重复造轮子FreeSql 主要优势在于易用性上基本是开箱即用在不同数据库之间切换兼容性比较好。作者花了大量的时间精力在这个项目肯请您花半小时了解下项目谢谢。FreeSql 整体的功能特性如下支持 CodeFirst 对比结构变化迁移支持 DbFirst 从数据库导入实体类支持 丰富的表达式函数自定义解析支持 批量添加、批量更新、BulkCopy支持 导航属性贪婪加载、延时加载、级联保存支持 读写分离、分表分库租户设计支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦/神通/人大金仓/MsAccess1.5.0 - 1.8.0-preview 更新的重要功能如下一、增加 ${a.Code}_{a.Id} lambda 解析二、增加 lambda 表达式树解析子查询 ToList string.Join() 产生 类似 group_concat 的效果三、增加 SqlExt 常用开窗函数的自定义表达式解析四、完善 WhereDynamicFilter 动态过滤查询五、增加 BeginEdit/EndEdit 批量编辑数据的功能六、增加 人大金仓/神通 数据库的访问支持七、增加 父子表树表递归查询、删除功能FreeSql 使用非常简单只需要定义一个 IFreeSql 对象即可static IFreeSql fsql new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, connectionString).UseAutoSyncStructure(true) //自动同步实体结构到数据库.Build(); //请务必定义成 Singleton 单例模式3|0增加 ${a.Code}_{a.Id} lambda 解析在之前查询数据的时候$ 这种语法糖神器居然不能使用在 lambda 表达式中实属遗憾。现在终于可以了如下var item fsql.GetRepositoryTopic().Insert(new Topic { Clicks 101, Title 我是中国人101, CreateTime DateTime.Parse(2020-7-5) }); var sql fsql.SelectTopic().WhereDynamic(item).ToSql(a new {str $x{a.Id 1}z-{a.CreateTime.ToString(yyyyMM)}{a.Title}{a.Title} }); Assert.Equal($SELECT concat(x,ifnull((a.Id 1), ),z-,ifnull(date_format(a.CreateTime,%Y%m), ),,ifnull(a.Title, ),,ifnull(a.Title, ),) as1 FROM tb_topic a WHERE (a.Id {item.Id}), sql);再次说明都是亲儿子并且都有对应的单元测试兄台大可放心用在不同的数据库中4|0增加 lambda 表达式树解析子查询 ToList string.Join() 产生 类似 group_concat 的效果v1.8.0 string.Join ToList 实现将子查询的多行结果拼接为一个字符串如1,2,3,4fsql.SelectTopic().ToList(a new {id a.Id,concat string.Join(,, fsql.SelectStringJoin01().ToList(b b.Id)) }); //SELECT a.Id, (SELECT group_concat(b.Id separator ,) // FROM StringJoin01 b) //FROM Topic a该语法在不同数据库都作了相应的 SQL 翻译。5|0增加 SqlExt 常用的自定义表达式树解析SqlExt.cs 定义了一些常用的表达式树解析如下fsql.SelectT1, T2().InnerJoin((a, b) b.Id a.Id).ToList((a, b) new{Id a.Id,EdiId b.Id,over1 SqlExt.Rank().Over().OrderBy(a.Id).OrderByDescending(b.EdiId).ToValue(),case1 SqlExt.Case().When(a.Id 1, 10).When(a.Id 2, 11).When(a.Id 3, 12).When(a.Id 4, 13).When(a.Id 5, SqlExt.Case().When(b.Id 1, 10000).Else(999).End()).End(), //这里因为复杂才这样一般使用三元表达式即可a.Id 1 ? 10 : 11groupct1 SqlExt.GroupConcat(a.Id).Distinct().OrderBy(b.EdiId).Separator(_).ToValue()});本功能利用 FreeSql 自定义解析实现常用表达式树解析欢迎 PR 补充6|0完善 WhereDynamicFilter 动态过滤查询是否见过这样的高级查询功能WhereDynamicFilter 在后端可以轻松完成这件事情前端根据 UI 组装好对应的 json 字符串传给后端就行如下DynamicFilterInfo dyfilter JsonConvert.DeserializeObjectDynamicFilterInfo( {Logic : Or,Filters :[{Field : Code,Operator : NotContains,Value : val1,Filters :[{Field : Name,Operator : NotStartsWith,Value : val2,}]},{Field : Parent.Code,Operator : Equals,Value : val11,Filters :[{Field : Parent.Name,Operator : Contains,Value : val22,}]}] } ); fsql.SelectVM_District_Parent().WhereDynamicFilter(dyfilter).ToList(); //SELECT a.Code, a.Name, a.ParentCode, a__Parent.Code as4, a__Parent.Name as5, a__Parent.ParentCode as6 //FROM D_District a //LEFT JOIN D_District a__Parent ON a__Parent.Code a.ParentCode //WHERE (not((a.Code) LIKE %val1%) AND not((a.Name) LIKE val2%) OR a__Parent.Code val11 AND (a__Parent.Name) LIKE %val22%)ISelect.WhereDynamicFilter 方法实现动态过滤条件与前端交互支持的操作符Contains/StartsWith/EndsWith/NotContains/NotStartsWith/NotEndsWith包含/不包含like %xx%或者 like xx%或者 like %xxEqual/NotEqual等于/不等于GreaterThan/GreaterThanOrEqual大于/大于等于LessThan/LessThanOrEqual小于/小于等于Range范围查询DateRange日期范围有特殊处理 value[1] 1Any/NotAny是否符合 value 中任何一项直白的说是 SQL IN7|0增加 BeginEdit/EndEdit 批量编辑数据的功能场景winform 加载表数据后一顿添加、修改、删除操作之后点击【保存】[Fact] public void BeginEdit() {fsql.DeleteBeginEdit01().Where(11).ExecuteAffrows();var repo fsql.GetRepositoryBeginEdit01();var cts new[] {new BeginEdit01 { Name 分类1 },new BeginEdit01 { Name 分类1_1 },new BeginEdit01 { Name 分类1_2 },new BeginEdit01 { Name 分类1_3 },new BeginEdit01 { Name 分类2 },new BeginEdit01 { Name 分类2_1 },new BeginEdit01 { Name 分类2_2 }}.ToList();repo.Insert(cts);repo.BeginEdit(cts); //开始对 cts 进行编辑cts.Add(new BeginEdit01 { Name 分类2_3 });cts[0].Name 123123;cts.RemoveAt(1);Assert.Equal(3, repo.EndEdit()); } class BeginEdit01 {public Guid Id { get; set; }public string Name { get; set; } }上面的代码 EndEdit 方法执行的时候产生 3 条 SQL 如下INSERT INTO BeginEdit01(Id, Name) VALUES(5f26bf07-6ac3-cbe8-00da-7dd74818c3a6, 分类2_3)UPDATE BeginEdit01 SET Name 123123 WHERE (Id 5f26bf00-6ac3-cbe8-00da-7dd01be76e26)DELETE FROM BeginEdit01 WHERE (Id 5f26bf00-6ac3-cbe8-00da-7dd11bcf54dc)提醒该操作只对变量 cts 有效不是针对全表对比更新。8|0增加 人大金仓/神通 数据库的访问支持天津神舟通用数据技术有限公司简称“神舟通用公司”隶属于中国航天科技集团CASC。是国内从事数据库、大数据解决方案和数据挖掘分析产品研发的专业公司。公司获得了国家核高基科技重大专项重点支持是核高基专项的牵头承担单位。自1993年在航天科技集团开展数据库研发以来神通数据库已历经27年的发展历程。公司核心产品主要包括神通关系型数据库、神通KStore海量数据管理系统、神通商业智能套件等系列产品研发和市场销售。基于产品组合可形成支持交易处理、MPP数据库集群、数据分析与处理等解决方案可满足多种应用场景需求。产品通过了国家保密局涉密信息系统、公安部等保四级、军B 级等安全评测和认证。北京人大金仓信息技术股份有限公司以下简称“人大金仓”是具有自主知识产权的国产数据管理软件与服务提供商。人大金仓由中国人民大学一批最早在国内开展数据库教学、科研、开发的专家于1999年发起创立先后承担了国家“863”、“核高基”等重大专项研发出了具有国际先进水平的大型通用数据库产品。2018年人大金仓申报的“数据库管理系统核心技术的创新与金仓数据库产业化”项目荣获2018年度国家科学技术进步二等奖产学研的融合进一步助力国家信息化建设。随着华为、中兴事务国产数据库市场相信是未来是趋势走向纵观 .net core 整个圈子对国产神舟通用、人大金仓数据库的支持几乎为 0今天 FreeSql ORM 可以使用 CodeFirst/DbFirst 两种模式进行开发。并且声称FreeSql 对各数据库没有亲儿子一说除了 MsAcces 其他全部是亲儿子在功能提供方面一碗水端平。众所周知 EFCore for oracle 问题多并且现在才刚刚更新到 3.x在这样的背景下一个国产数据库更不能指望谁实现好用的 EFCore。目前看来除了 EFCore for sqlserver 我们没把握完全占优势起码在其他数据库肯定是我们更接地气。使用 FreeSql 访问人大金仓/神通 数据库只需要修改代码如下即可static IFreeSql fsql new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.ShenTong, connectionString) //修改 DataType 设置切换数据库.UseAutoSyncStructure(true) //自动同步实体结构到数据库.Build(); //请务必定义成 Singleton 单例模式9|0增加 父子表树表递归查询、删除功能无限级分类父子是一种比较常用的表设计每种设计方式突出优势的同时也带来缺陷如方法1表设计中只有 parent_id 字段困扰查询麻烦本文可解决方法2表设计中冗余子级id便于查询困扰添加/更新/删除的时候需要重新计算方法3表设计中存储左右值编码困扰同上方法1设计最简单我们正是解决它设计简单使用复杂的问题。首先按照导航属性的定义定义好父子属性public class Area {[Column(IsPrimary true)]public string Code { get; set; }public string Name { get; set; }public virtual string ParentCode { get; set; }[Navigate(nameof(ParentCode))]public Area Parent { get; set; }[Navigate(nameof(ParentCode))]public ListArea Childs { get; set; } }定义 Parent 属性在表达式中可以这样fsql.SelectArea().Where(a a.Parent.Parent.Parent.Name 中国).First();定义 Childs 属性在表达式中可以这样子查询fsql.SelectArea().Where(a a.Childs.AsSelect().Any(c c.Name 北京)).First();定义 Childs 属性还可以使用【级联保存】、【贪婪加载】 等等操作。利用级联保存添加测试数据如下fsql.DeleteArea().Where(11).ExecuteAffrows(); var repo fsql.GetRepositoryArea(); repo.DbContextOptions.EnableAddOrUpdateNavigateList true; repo.DbContextOptions.NoneParameter true; repo.Insert(new Area {Code 100000,Name 中国,Childs new ListArea(new[] {new Area{Code 110000,Name 北京,Childs new ListArea(new[] {new Area{ Code110100, Name 北京市 },new Area{ Code110101, Name 东城区 },})}}) });功能1ToTreeList配置好父子属性之后就可以这样用了var t1 fsql.SelectArea().ToTreeList(); Assert.Single(t1); Assert.Equal(100000, t1[0].Code); Assert.Single(t1[0].Childs); Assert.Equal(110000, t1[0].Childs[0].Code); Assert.Equal(2, t1[0].Childs[0].Childs.Count); Assert.Equal(110100, t1[0].Childs[0].Childs[0].Code); Assert.Equal(110101, t1[0].Childs[0].Childs[1].Code);查询数据本来是平面的ToTreeList 方法将返回的平面数据在内存中加工为树型 List 返回。功能2AsTreeCte 递归删除很常见的无限级分类表功能删除树节点时把子节点也处理一下。fsql.SelectArea().Where(a a.Name 中国).AsTreeCte().ToDelete().ExecuteAffrows(); //删除 中国 下的所有记录如果软删除fsql.SelectArea().Where(a a.Name 中国).AsTreeCte().ToUpdate().Set(a a.IsDeleted, true).ExecuteAffrows(); //软删除 中国 下的所有记录功能3AsTreeCte 递归查询若不做数据冗余的无限级分类表设计递归查询少不了AsTreeCte 正是解决递归查询的封装方法参数说明参数描述(可选) pathSelector路径内容选择可以设置查询返回中国 - 北京 - 东城区(可选) upfalse(默认)由父级向子级的递归查询true由子级向父级的递归查询(可选) pathSeparator设置 pathSelector 的连接符默认-(可选) level设置递归层级通过测试的数据库MySql8.0、SqlServer、PostgreSQL、Oracle、Sqlite、达梦、人大金仓姿势一AsTreeCte() ToTreeListvar t2 fsql.SelectArea().Where(a a.Name 中国).AsTreeCte() //查询 中国 下的所有记录.OrderBy(a a.Code).ToTreeList(); //非必须也可以使用 ToList见姿势二 Assert.Single(t2); Assert.Equal(100000, t2[0].Code); Assert.Single(t2[0].Childs); Assert.Equal(110000, t2[0].Childs[0].Code); Assert.Equal(2, t2[0].Childs[0].Childs.Count); Assert.Equal(110100, t2[0].Childs[0].Childs[0].Code); Assert.Equal(110101, t2[0].Childs[0].Childs[1].Code); // WITH as_tree_cte // as // ( // SELECT 0 as cte_level, a.Code, a.Name, a.ParentCode // FROM Area a // WHERE (a.Name 中国)// union all// SELECT wct1.cte_level 1 as cte_level, wct2.Code, wct2.Name, wct2.ParentCode // FROM as_tree_cte wct1 // INNER JOIN Area wct2 ON wct2.ParentCode wct1.Code // ) // SELECT a.Code, a.Name, a.ParentCode // FROM as_tree_cte a // ORDER BY a.Code姿势二AsTreeCte() ToListvar t3 fsql.SelectArea().Where(a a.Name 中国).AsTreeCte().OrderBy(a a.Code).ToList(); Assert.Equal(4, t3.Count); Assert.Equal(100000, t3[0].Code); Assert.Equal(110000, t3[1].Code); Assert.Equal(110100, t3[2].Code); Assert.Equal(110101, t3[3].Code); //执行的 SQL 与姿势一相同姿势三AsTreeCte(pathSelector) ToList设置 pathSelector 参数后如何返回隐藏字段var t4 fsql.SelectArea().Where(a a.Name 中国).AsTreeCte(a a.Name [ a.Code ]).OrderBy(a a.Code).ToList(a new {item a,level Convert.ToInt32(a.cte_level),path a.cte_path }); Assert.Equal(4, t4.Count); Assert.Equal(100000, t4[0].item.Code); Assert.Equal(110000, t4[1].item.Code); Assert.Equal(110100, t4[2].item.Code); Assert.Equal(110101, t4[3].item.Code); Assert.Equal(中国[100000], t4[0].path); Assert.Equal(中国[100000] - 北京[110000], t4[1].path); Assert.Equal(中国[100000] - 北京[110000] - 北京市[110100], t4[2].path); Assert.Equal(中国[100000] - 北京[110000] - 东城区[110101], t4[3].path); // WITH as_tree_cte // as // ( // SELECT 0 as cte_level, a.Name || [ || a.Code || ] as cte_path, a.Code, a.Name, a.ParentCode // FROM Area a // WHERE (a.Name 中国)// union all// SELECT wct1.cte_level 1 as cte_level, wct1.cte_path || - || wct2.Name || [ || wct2.Code || ] as cte_path, wct2.Code, wct2.Name, wct2.ParentCode // FROM as_tree_cte wct1 // INNER JOIN Area wct2 ON wct2.ParentCode wct1.Code // ) // SELECT a.Code as1, a.Name as2, a.ParentCode as5, a.cte_level as6, a.cte_path as7 // FROM as_tree_cte a // ORDER BY a.Code更多姿势...请根据代码注释进行尝试10|0写在最后作者的努力喜欢能打动到你希望正在使用的、善良的您能动一动小手指把文章转发一下让更多人知道 .NET 有这样一个好用的 ORM 存在。谢谢了FreeSql 开源协议 MIT https://github.com/dotnetcore/FreeSql可以商用文档齐全。QQ群4336577(已满)、8578575(在线)如果你有好的 ORM 实现想法欢迎给作者留言讨论谢谢观看
http://www.zqtcl.cn/news/838284/

相关文章:

  • 禅城南庄网站制作做门户网站的公司
  • 网站里的图片是怎么做的同泰公司网站公司查询
  • seo怎么做网站内容wordpress文件上传失败
  • zenm自己做网站wordpress 摄影 模板
  • 网站手机页面如何做微信小程序开发平台官网登录
  • 嘉兴外贸网站制作成都网络公司最新招聘
  • 租服务器发布网站团购网站单页模板
  • 西安网站建设运维凡客精选
  • 权威网站发布平台wordpress 如何安装
  • 没有官方网站怎么做seo优化军事新闻
  • 在招聘网站做销售技巧教育培训平台
  • 网站栏目 英文做网站在哪接单
  • 湖北网络营销网站市场营销策划案
  • 政务信息系统网站建设规范上海网站开发制作公司
  • 网站公众平台建设方案湖南seo优化报价
  • 企业网站制作公司discuz 转wordpress
  • 可信网站是什么意思应用软件开发平台
  • 上海市官方网站福建省中嘉建设工程有限公司网站
  • 备案之后怎样把 放到网站上大连建设网球场价格
  • dkp网站开发今天最新新闻
  • 山东省环保厅官方网站建设项目东莞寮步网站设计
  • 网站开发可能遇到的问题附近电脑培训班位置
  • 如何查看域名以前是做什么网站的网站索引下降如何解决
  • 潜江 网站建设扬中话
  • 网站建设项目方案ppt广州建站模板平台
  • 房产部门成立网站免费seo推广软件
  • python做网站好处百度指数分析报告
  • 网站建设挣钱班级介绍网页制作模板
  • 工作室 网站建设app公司
  • 自己做的网站怎么在百度搜索到网页制作论文3000字