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

杭州企业云网站建设帝国网站seo

杭州企业云网站建设,帝国网站seo,官网模板建站塔山双喜,wordpress 付费功能很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后#xff0c;今天正式宣布对外推广。它是一个类 GraphQL 风格的 ORM(Object/Relational Mapping) 数据访问框架。又一个轮子#xff1f;在很长时间里#xff0c;.NET 阵营似乎一直缺乏一个被普遍… 很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后今天正式宣布对外推广。它是一个类 GraphQL 风格的 ORM(Object/Relational Mapping) 数据访问框架。又一个轮子在很长时间里.NET 阵营似乎一直缺乏一个被普遍使用的 ORM 数据访问框架从最早的原生 ADO.NET 到舶来品 iBatis.NET 和 Hibernate.NET后来又经历了 Linq for SQL 与 Entity Framework 的混战可能是因为 Entity Framework 早期版本的模糊定位和反复变更的设计导致了它失之霸主之位进而造就了一段百舸争流、群雄共逐的战国时代。在历经漫长而反复的期待、失望、纠结和痛苦之后我终于决定动手造一个轮子。设计理念在开始动手之前先确定以下基本设计原则数据库优先(Database First)严格的 POCO/POJO 支持映射模型与代码完全隔离禁止业务层出现 SQL 和类 SQL 代码在一个业务系统中数据结构及其关系毋庸置疑是最底层的基础性结构数据库应由系统架构师或开发负责人进行仔细设计No Schema/Weakly Schema 的思潮是涂抹了蜂蜜的毒药数据访问映射以数据库表结构关系为基石在此之上业务层亦以概念映射模型为准绳层级之间相互隔离。领域模型实体避免通过注解(标签)来进行元数据定义应确保严格符合 POCO/POJO 范式。通过语义化的 Schema 来声明访问的数据结构关系禁止应用层的 SQL 和 Linq 式的类 SQL 代码可降低业务层对数据层的依赖、提升代码可维护性外还具备更加统一可控的便利性并为数据访问引擎的实现提供了更大的优化空间和自由度。范例说明下面通过三个的例子注例子均基于 Zongsoft.Community 项目来佐证上面的部分设计理念更多示例和阐述请参考 Zongsoft.Data 项目的 README.md 文档和 Zongsoft.Community 项目的代码。提示下面的范例均基于 Zongsoft.Community 开源项目该项目是一个完整的论坛社区的后台程序。你可能需要预先阅读一下该项目的《数据库表结构设计》文档以便更好的理解范例代码的业务逻辑。示例一导航查询及导航过滤var forums this.DataAccess.SelectForum( Condition.Equal(SiteId, this.User.SiteId) Condition.In(Visibility, Visibility.Internal, Visibility.Public) | ( Condition.Equal(Visibility, Visibility.Specified) Condition.Exists(Users, Condition.Equal(UserId, this.User.UserId) ( Condition.Equal(IsModerator, true) | Condition.NotEqual(Permission, Permission.None) ) ) ), *, MostRecentThread{ThreadId,Title,Creator{Name,Nickname,Avatar}});上述数据访问的查询方法大致生成如下SQL脚本SELECT t.*, t1.ThreadId AS MostRecentThread.ThreadId, t1.Title AS MostRecentThread.Title, t1.CreatorId AS MostRecentThread.CreatorId, t2.UserId AS MostRecentThread.Creator.UserId, t2.Name AS MostRecentThread.Creator.Name, t2.Nickname AS MostRecentThread.Creator.Nickname, t2.Avatar AS MostRecentThread.Creator.AvatarFROM Forum t LEFT JOIN Thread AS t1 ON t.MostRecentThreadIdt1.ThreadId LEFT JOIN UserProfile AS t2 ON t1.CreatorIdt2.UserIdWHERE t.SiteId p1 AND t.Visibility IN (p2, p3) OR ( t.Visibility p4 AND EXISTS ( SELECT u.SiteId, u.ForumId, u.UserId FROM ForumUser u WHERE u.SiteId t.SiteId AND u.ForumId t.ForumId AND u.UserId p5 AND ( u.IsModerator p6 OR u.Permission ! p7 ) ) );上述示例通过 Select 查询方法的 schema 参数即值为 *, MostRecentThread{ThreadId,Title,Creator{Name,Nickname,Avatar}} 的参数从数据结构关系的层次指定了查询数据的形状因而不再需要 SQL 或类 SQL 语法中 JOIN 这样命令式的语法元素它不光提供了更简洁且语义化的 API 访问方式而且还给数据访问引擎底层提供了更大的优化空间和自由度。如果将 Select 查询方法的 schema 参数值改为 *,Moderators{*},MostRecentThread{ThreadId,Title,Creator{Name,Nickname,Avatar}} 后数据访问引擎会将查询内部分解为一对多的两条 SQL 语句进行迭代执行而这些都不需要业务层进行分拆处理因而提升了效率并降低了业务层的复杂度。将 Schema 模式表达式通过 Web API 提供给前端应用将大大减少后端开发的工作量提升前后端的工作效率。示例二一对多的关联新增// 构建待新增的实体对象var forum new{ SiteId this.User.SiteId, GroupId 100, Name xxxx, // 一对多的导航属性 Users new ForumUser[] { new ForumUser { UserId 1001, IsModerator true }, new ForumUser { UserId 1002, Permission Permission.Read }, new ForumUser { UserId 1003, Permission Permission.Write }, }}// 执行数据新增操作this.DataAccess.InsertForum(forum, *, Users{*});上述数据访问的新增方法大致生成如下SQL脚本/* 主表插入语句执行一次 */INSERT INTO Forum (SiteId,ForumId,GroupId,Name,...) VALUES (p1,p2,p3,p4,...);/* 子表插入语句执行多次 */INSERT INTO ForumUser (SiteId,ForumId,UserId,Permission,IsModerator) VALUES (p1,p2,p3,p4,p5);上述示例通过 Insert 新增方法的 schema 参数即值为 *,User{*} 的参数指定了新增数据的形状由数据访问引擎根据映射定义自动处理底层的 SQL 执行方式确保业务层代码的简洁和更高的执行效率。示例三一对一和一对多的关联更新对于“一对多”的导航属性还能确保该属性值 (集合类型) 以 UPSERT 模式写入。public bool Approve(ulong threadId){ //构建更新的条件 var criteria Condition.Equal(nameof(Thread.ThreadId), threadId) Condition.Equal(nameof(Thread.Approved), false) Condition.Equal(nameof(Thread.SiteId), this.User.SiteId) Condition.Exists(Forum.Users, Condition.Equal(nameof(Forum.ForumUser.UserId), this.User.UserId) Condition.Equal(nameof(Forum.ForumUser.IsModerator), true)); //执行数据更新操作 return this.DataAccess.UpdateThread(new { Approved true, ApprovedTime DateTime.Now, Post new { Approved true, } }, criteria, *,Post{Approved}) 0;}上述数据访问的更新方法大致生成如下SQL脚本/* 以下代码为支持 OUTPUT/RETURNING 子句的数据库SQLServer,Oracle,PostgreSQL *//* 根据更新的关联键创建临时表 */CREATE TABLE #TMP( PostId bigint NOT NULL);/* 更新主表并将更新的关联键输出到内存临时表 */UPDATE T SET T.[Approved]p1, T.[ApprovedTime]p2OUTPUT DELETED.PostId INTO #TMPFROM [Community_Thread] AS T LEFT JOIN [Community_Forum] AS T1 ON /* Forum */ T1.[SiteId]T.[SiteId] AND T1.[ForumId]T.[ForumId]WHERE T.[ThreadId]p3 AND T.[Approved]p4 AND T.[SiteId]p5 AND EXISTS ( SELECT [SiteId],[ForumId] FROM [Community_ForumUser] WHERE [SiteId]T1.[SiteId] AND [ForumId]T1.[ForumId] AND [UserId]p6 AND [IsModerator]p7 );/* 更新关联表 */UPDATE T SET T.[Approved]p1FROM [Community_Post] AS TWHERE EXISTS ( SELECT [PostId] FROM #TMP WHERE [PostId]T.[PostId]);上述示例通过 Update 更新方法的 schema 参数即值为 *,Post{Approved} 的参数指定了更新数据的形状数据访问引擎将根据数据库类型生成高效的 SQL 语句对于业务层而言这一切都是无感的、透明的。对于一对多的导航属性数据访问引擎默认将以 UPSERT 模式处理子集的写入关于 UPSERT 更多信息请参考 Zongsoft.Data 项目文档。性能我们希望提供最佳的综合性价比对于一个 ORM 数据访问引擎来说性能的关注点主要(不限)有这些要素生成简洁高效的 SQL 脚本并尽可能利用特定数据库的最新 SQL 语法数据查询结果的实体组装(Populate)过程必须高效避免反射有效的语法树缓存。实现层面我们采用 Emitting 动态编译技术对实体组装(Populate)、数据参数绑定等进行预热处理可查阅 DataPopulator 等相关类的源码深入了解。其他得益于 “以声明方式来表达数据结构关系” 的语义化设计理念相对于命令式设计而言它使得程序意图更加聚焦天然地对底层数据的表达和优化更加宽容与自由。更多详细内容譬如读写分离、继承表、数据模式、映射文件、过滤器、验证器、类型转换、数据隔离请查阅相关文档。支持赞助我们欢迎并期待任何形式的推广支持如果你认同我们的设计理念请为这个项目点赞(Star)如果你认为该项目很有用并且希望支持它未来的发展请给予必要的资金来支持它关注 Zongsoft 微信公众号对我们的文章进行打赏加入 Zongsoft 知识星球圈可以获得在线问答和技术支持如果您的企业需要现场技术支持与辅导又或者需要开发新功能、即刻的错误修复等请发邮件给我。提醒点击左下角的“阅读原文”会有更好的阅读体验。
http://www.zqtcl.cn/news/223381/

相关文章:

  • 做的网站图片不显示2018做网站赚钱不
  • 国内建站平台网站建设是什么科目
  • 响应式个人网站psd建设银行网站联系电话
  • 大型网站开发实战品牌网站建设费用要多少
  • 昆山网站建设昆山html5制作手机端页面
  • 做网站的国标有哪些达州网络推广
  • 站内seo和站外seo区别wordpress演示数据
  • 建设旅游网站财务分析创意设计公司网站
  • 张家港网站优化wordpress调用图片上传
  • 做网站要商标吗房产网站 设计方案
  • 做网站的费用怎么做账客户案例 网站建设
  • 怎么查询网站的备案号城乡建设杂志网站
  • 婚恋网站哪家做的最好北斗导航2022最新版手机版
  • 别墅效果图网站重庆金融公司网站建设
  • 中兴能源建设有限公司网站企业营销策划及推广
  • 外贸英文网站制作WordPress对接微信公众号
  • 推广网站建设花费得多少钱哪些平台可以发布软文
  • wordpress网站检测购物app大全
  • 遵义建设厅官方网站 元丰兰州网站设计有限公司
  • 芜湖做网站的公司排名贵阳好的网站建设公司
  • 网站建设 骏域网站建设专家最有效的15个营销方法
  • 大连品牌官网建站为什么有些网站更新的信息看不到
  • 富阳市网站域名申请好了怎么做网站
  • 做药物分析必须知道的网站网站攻击一般有那些
  • 一般网站做哪些端口映射那个网站做境外自由行便宜
  • 网站的建站过程公司seo是什么意思
  • 胜利油田局域网主页入口seo自学网官网
  • 阜阳网站是网站开发与设计专业
  • 网站建设哪个品牌好网站新备案不能访问
  • 网站备案号申请流程华为企业文化