自动收录导航网网站源码分享?自动秒收录导航源码

大家好,自动收录导航网网站源码分享相信很多的网友都不是很明白,包括自动秒收录导航源码也是一样,不过没有关系,接下来就来为大家分享关于自动收录导航网网站源码分享和自动秒收录导航源码的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

.NETORM新概念导航

今天这篇文章分享一款好用简单的ORM框架SqlSugar,相比EFCore的导航查询更加简单,配置更加容易,几分钟就能上手

1、导航查询特点

作用:主要处理主对象里面有子对象这种层级关系查询

1.1无外键开箱就用

其它ORM导航查询需要各种配置或者外键,而SqlSugar则开箱就用,无外键,只需配置特性和主键就能使用

1.2高性能优

查询性能非常强悍

支持大数据分页导航查询

3.3语法超级爽

注意:多级查询时VS有时候没提示直接写就行了,相比其他.NETORM语法要简单的多

varlist=db.Queryable<Test>()\n.Includes(x=>x.Provinces,x=>x.Citys,x=>x.Street)//多级查询有时候VS没提示手写\n.Includes(x=>x.ClassInfo)//一级查询\n.ToList();\n\n\nvarlist=db.Queryable<Test>()\n//多级查询加排序过滤\n.Includes(x=>x.Provinces.Where(z=>z.Id>0).OrderBy(z=>z.Id).ToList(),x=>x.Citys,x=>x.Street)\n//一级查询\n.Includes(x=>x.ClassInfo)\n.ToList();

2、新导航查询ORM

适合有主键的常规操作,请升级到5.0.6.8

2.1一对一

//实体\npublicclassStudentA\n{\n[SugarColumn(IsPrimaryKey=true,IsIdentity=true)]\npublicintStudentId{get;set;}\npublicstringName{get;set;}\npublicintSchoolId{get;set;}\n[Navigate(NavigateType.OneToOne,nameof(SchoolId))]//一对一\npublicSchoolASchoolA{get;set;}\n\n}\npublicclassSchoolA\n{\n[SugarColumn(IsPrimaryKey=true,IsIdentity=true)]\npublicintSchoolId{get;set;}\npublicstringSchoolName{get;set;}\n}\n//代码\nvarlist2=db.Queryable<StudentA>()\n.Includes(x=>x.SchoolA)\n.Where(x=>x.SchoolA.SchoolName==&34;)//可以对一级导航进行过滤\n.ToList();

2.2一对多

publicclassStudentA\n{\n[SugarColumn(IsPrimaryKey=true,IsIdentity=true)]\npublicintStudentId{get;set;}\npublicstringName{get;set;}\npublicintSchoolId{get;set;}\n[Navigate(NavigateType.OneToMany,nameof(BookA.studenId))]\npublicList<BookA>Books{get;set;}\n\n}\npublicclassBookA\n{\n[SugarColumn(IsPrimaryKey=true,IsIdentity=true)]\npublicintBookId{get;set;}\npublicstringName{get;set;}\npublicintstudenId{get;set;}\n}\n\n//例1:简单用法\nvarlist=db.Queryable<StudentA>()\n.Includes(x=>x.Books)\n.ToList();\n\n//例2:支持Any和Count对主表进行过滤\nvarlist=db.Queryable<StudentA>()\n.Includes(x=>x.Books)\n.Where(x=>x.Books.Any(z=>z.BookId==1))\n.ToList();\n\n//例3:对子对象进行排序和过滤\nvarlist=db.Queryable<StudentA>()\n.Includes(x=>x.Books.Where(y=>y.BookId>0).OrderBy(y=>y.BookId).ToList())\n.ToList();

2.3多对多

//多对多\npublicclassABMapping1\n{\n[SugarColumn(IsPrimaryKey=true)]\npublicintAId{get;set;}\n[SugarColumn(IsPrimaryKey=true)]\npublicintBId{get;set;}\n}\npublicclassA1\n{\n[SugarColumn(IsPrimaryKey=true,IsIdentity=true)]\npublicintId{get;set;}\npublicstringName{get;set;}\n[Navigate(typeof(ABMapping1),nameof(ABMapping1.AId),nameof(ABMapping1.BId))]\npublicList<B1>BList{get;set;}\n}\npublicclassB1\n{\n[SugarColumn(IsPrimaryKey=true,IsIdentity=true)]\npublicintId{get;set;}\npublicstringName{get;set;}\n[Navigate(typeof(ABMapping1),nameof(ABMapping1.BId),nameof(ABMapping1.AId))]\npublicList<A1>AList{get;set;}\n}\n//例1:简单用法\nvarlist3=db.Queryable<A1>().Includes(x=>x.BList).ToList();\n\n//例2:支持子对象排序和过滤\nvarlist3=db.Queryable<A1>().Includes(x=>x.BList.Where(z=>z.Id>0).ToList()).ToList();\n\n//例3:支持主表过滤Any和Count\nvarlist3=db.Queryable<A1>().Includes(x=>x.BList)\n.Where(x=>x.BList.Any(z=>z.Id==1)).ToList();

2.4多级查询

配置好实体类,我们可以多级查询,.NET中轻松多级查询

varlist=db.Queryable<Test>()\n.Includes(x=>x.Provinces,x=>x.Citys,x=>x.Street)//有时候没提示直接写\n.Includes(x=>x.ClassInfo)//一级查询\n.ToList();

2.5大数据分页导航

适合一次性查询1000条以上的导航

varlist=newList<Tree1>();\n\ndb.Queryable<Tree1>()\n.Includes(it=>it.Child)\n.ForEach(it=>list.Add(it),300);//每次查询300条

更多用法:https://www.donet5.com/Home/Doc?typeId=2414

3、ORM无配置映射(高性能)

适合没有主键或者复杂的一些操作

3.1无配置映射实现二层

结构:Student->SchoolA

varlist=db.Queryable<StudentA>().ToList();\ndb.ThenMapper(list,stu=>\n{\n//如果加Where不能带有stu参数,stu参数写到SetContext\nstu.SchoolA=db.Queryable<SchoolA>().SetContext(scl=>scl.SchoolId,()=>stu.SchoolId,stu).FirstOrDefault();\n});\n//SetContext不会生成循环操作,高性能和直接Where性能是不一样的

如果没有SetContext那么这个查询将会循环

3.2无配置映射无限级

了解原理后我们用ThenMapper想映射哪层就映射哪层

vartreeRoot=db.Queryable<Tree>().Where(it=>it.Id==1).ToList();\n//第一层\ndb.ThenMapper(treeRoot,item=>\n{\nitem.Child=db.Queryable<Tree>().SetContext(x=>x.ParentId,()=>item.Id,item).ToList();\n});\n//第二层\ndb.ThenMapper(treeRoot.SelectMany(it=>it.Child),it=>\n{\nit.Child=db.Queryable<Tree>().SetContext(x=>x.ParentId,()=>it.Id,it).ToList();\n});\n//第三层\ndb.ThenMapper(treeRoot.SelectMany(it=>it.Child).SelectMany(it=>it.Child),it=>\n{\nit.Child=db.Queryable<Tree>().SetContext(x=>x.ParentId,()=>it.Id,it).ToList();\n});\n//这儿只是用树型结构来证明可以实现无限级别导航查询,实际开发中树型结构用ToTree实现\npublicclassTree\n{\n[SqlSugar.SugarColumn(IsPrimaryKey=true)]\npublicintId{get;set;}\npublicstringName{get;set;}\npublicintParentId{get;set;}\n[SqlSugar.SugarColumn(IsIgnore=true)]\npublicTreeParent{get;set;}\n[SqlSugar.SugarColumn(IsIgnore=true)]\npublicList<Tree>Child{get;set;}\n}\n//SetContext不会生成循环操作,高性能和直接Where性能是不一样的

4、.NETORM未来计划

Jsontosql正在开发中,未来将打造一套直接由前端操作数据库的API

{\n&34;:&34;,\nSelect:[[{SqlFunc_AggregateMin:[&34;]},&34;],[{SqlFunc_GetDate:[]},&34;]]\n}

将支持权限过滤,验证,多表查询,层级导航查询等

GitHUB源码:

https://github.com/donet5/SqlSugar

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平