时间:2021-07-01 10:21:17 帮助过:3人阅读
- <span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Text;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Threading.Tasks;
- </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Standard.Frame.BEntity
- {
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 实体特性
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [AttributeUsage(AttributeTargets.Class, AllowMultiple = <span style="color: #0000ff;">false</span>, Inherited = <span style="color: #0000ff;">false</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> EntityAttribute : Attribute
- {
- </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> EntityAttribute(String entityName, String tableName)
- {
- EntityName </span>=<span style="color: #000000;"> entityName;
- TableName </span>=<span style="color: #000000;"> tableName;
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 实体名称
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> EntityName { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 表名称
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> TableName { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 属性特性
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [AttributeUsage(AttributeTargets.Property, AllowMultiple = <span style="color: #0000ff;">false</span>, Inherited = <span style="color: #0000ff;">true</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> PropertyAttribute : Attribute
- {
- </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> PropertyAttribute() { }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> json节点名称
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> FieldName { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 列名称
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> ColumnName { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 节点类型
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> NodeType { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 是否是主键
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> IsPK { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 是否删除
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> IsDeletedFlag { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 主实体
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> MainEntity { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- }
- }</span>
二、在实体、属性上添加特性 这里特性的作用: 1、建立json对象与数据库表的对应关系。 2、建立json节点的name与数据库表列的对应关系。 3、指定json节点value的类型,类型主要有三类:字符串、json对象、数组。
- <span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Text;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Threading.Tasks;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Standard.Frame.Config;
- </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Standard.Frame.BEntity
- {
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 项目信息
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Entity(<span style="color: #800000;">"</span><span style="color: #800000;">PlanProject</span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_20</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> PlanProject:BaseBEntity
- {
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 项目ID
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">planProjectID</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_20_COL_10</span><span style="color: #800000;">"</span>, NodeType = NodeType.String, IsPK =<span style="color: #000000;"> BooleanType.True)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> PlanProjectID { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br><br> </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 项目名称
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">planProjectName</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_20_COL_70</span><span style="color: #800000;">"</span>, NodeType =<span style="color: #000000;"> NodeType.String)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> PlanProjectName { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br>
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 是否已删除
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = NodeOperation.Operation, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_20_COL_200</span><span style="color: #800000;">"</span>, NodeType = NodeType.String, IsDeletedFlag =<span style="color: #000000;"> BooleanType.True)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> IsDeleted { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 创建时间
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">createTime</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_20_COL_210</span><span style="color: #800000;">"</span>, NodeType =<span style="color: #000000;"> NodeType.String)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> CreateTime { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 创建人
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">creatorID</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_20_COL_220</span><span style="color: #800000;">"</span>, NodeType = NodeType.Json, MainEntity = <span style="color: #800000;">"</span><span style="color: #800000;">User</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> CreatorID { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 项目组成员
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">projectMember</span><span style="color: #800000;">"</span>, NodeType = NodeType.Array, MainEntity = <span style="color: #800000;">"</span><span style="color: #800000;">ProjectMember</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> ProjectMember { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 项目组成员信息
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Entity(<span style="color: #800000;">"</span><span style="color: #800000;">ProjectMember</span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> ProjectMember : BaseBEntity
- {
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 人员ID
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">projectMemberID</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220_COL_10</span><span style="color: #800000;">"</span>, NodeType = NodeType.String, IsPK =<span style="color: #000000;"> BooleanType.True)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> ProjectMemberID { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 姓名
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">projectMemberName</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220_COL_20</span><span style="color: #800000;">"</span>, NodeType =<span style="color: #000000;"> NodeType.String)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> ProjectMemberName { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 性别
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">sex</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220_COL_30</span><span style="color: #800000;">"</span>, NodeType =<span style="color: #000000;"> NodeType.String)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Sex { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }<br>
- </span><span style="color: #808080;"> ///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 备注
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">notes</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220_COL_110</span><span style="color: #800000;">"</span>, NodeType =<span style="color: #000000;"> NodeType.String)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Notes { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 是否已删除
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = NodeOperation.Operation, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220_COL_200</span><span style="color: #800000;">"</span>, NodeType = NodeType.String, IsDeletedFlag =<span style="color: #000000;"> BooleanType.True)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> IsDeleted { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 创建时间
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">createTime</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220_COL_210</span><span style="color: #800000;">"</span>, NodeType =<span style="color: #000000;"> NodeType.String)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> CreateTime { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 创建人
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">creatorID</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_220_COL_220</span><span style="color: #800000;">"</span>, NodeType = NodeType.Json, MainEntity = <span style="color: #800000;">"</span><span style="color: #800000;">User</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> CreatorID { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 项目
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- [Property(FieldName = <span style="color: #800000;">"</span><span style="color: #800000;">planProject</span><span style="color: #800000;">"</span>, ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">XMGL_20_COL_10</span><span style="color: #800000;">"</span>, NodeType = NodeType.Json, MainEntity = <span style="color: #800000;">"</span><span style="color: #800000;">PlanProject</span><span style="color: #800000;">"</span><span style="color: #000000;">)]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> PlanProject { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- }
- }</span>
三、反射机制,分析实体特性、属性特性,将json对象数据保存到数据库。
- <span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Text;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Threading.Tasks;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Newtonsoft.Json;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Standard.Frame.BEntity;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Standard.Frame.Utility;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Standard.Frame.Config;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Standard.Frame.DBAccess;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Reflection;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Standard.Frame.Utility;
- </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Standard.Frame.BLRuler
- {
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> JsonToTable
- {
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Save(<span style="color: #0000ff;">object</span><span style="color: #000000;"> inputJsonObj)
- {
- </span><span style="color: #0000ff;">try</span><span style="color: #000000;">
- {
- SaveJsonObj(inputJsonObj, </span><span style="color: #800000;">"</span><span style="color: #800000;">PlanProject</span><span style="color: #800000;">"</span>, <span style="color: #0000ff;">null</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e)
- {
- LogUtility.Write(DateTime.Now.ToString() </span>+ <span style="color: #800000;">"</span><span style="color: #800000;"> : </span><span style="color: #800000;">"</span> +<span style="color: #000000;"> e.Message);
- }
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 保存输入的json对象
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="inputJsonObj"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="entityName"></param></span>
- <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> SaveJsonObj(<span style="color: #0000ff;">object</span> inputJsonObj, <span style="color: #0000ff;">string</span> entityName, Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;"> tupleFk)
- {
- Dictionary</span><<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> dicReq =<span style="color: #000000;"> CommonFacade.ParseJsonObjToDic(inputJsonObj);
- Type type </span>=<span style="color: #000000;"> CommonFacade.GetEntityType(entityName);
- </span><span style="color: #0000ff;">string</span> tableName =<span style="color: #000000;"> CommonFacade.GetTableNameByType(type);
- System.Reflection.PropertyInfo[] properties </span>=<span style="color: #000000;"> type.GetProperties();
- </span><span style="color: #008000;">//</span><span style="color: #008000;">先保存主表数据(string类型的节点)</span>
- <span style="color: #0000ff;">object</span> recordID =<span style="color: #000000;"> SaveStringNode(dicReq, tableName, properties, tupleFk);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">保存从表数据(array类型的节点)</span>
- <span style="color: #000000;"> SaveArrayNode(dicReq, properties, entityName, recordID);
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 保存json对象中的字符串节点
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dicReq"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="tableName"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="properties"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="tupleFk"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
- <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">object</span> SaveStringNode(Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> dicReq, <span style="color: #0000ff;">string</span> tableName, System.Reflection.PropertyInfo[] properties,Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;"> tupleFk)
- {
- PreSqlAccess sqlAccess </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> PreSqlAccess();
- Dictionary</span><<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> dicTable = <span style="color: #0000ff;">new</span> Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;">();
- Tuple</span><<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> tuplePk =<span style="color: #000000;"> ParseStringNode(dicReq, properties, dicTable);
- </span><span style="color: #0000ff;">if</span> (tupleFk != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
- {
- dicTable.Remove(tupleFk.Item1);
- dicTable.Add(tupleFk.Item1, tupleFk.Item2);
- }
- </span><span style="color: #0000ff;">object</span> recordID =<span style="color: #ff0000;"> sqlAccess.InsertOrUpdateDataSync(tableName, dicTable, tuplePk);//保存到数据库
- </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> recordID;
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 保存从表数据(数据类型为array的节点)
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dicReq"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="properties"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="recordID"></param></span>
- <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> SaveArrayNode(Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> dicReq, System.Reflection.PropertyInfo[] properties, <span style="color: #0000ff;">string</span> mainEntityName, <span style="color: #0000ff;">object</span><span style="color: #000000;"> recordID)
- {
- System.Attribute[] attrs </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">foreach</span> (System.Reflection.PropertyInfo p <span style="color: #0000ff;">in</span><span style="color: #000000;"> properties)
- {
- attrs </span>=<span style="color: #000000;"> System.Attribute.GetCustomAttributes(p);
- </span><span style="color: #0000ff;">foreach</span> (System.Attribute attr <span style="color: #0000ff;">in</span><span style="color: #000000;"> attrs)
- {
- </span><span style="color: #0000ff;">if</span> (attr <span style="color: #0000ff;">is</span><span style="color: #000000;"> PropertyAttribute)
- {
- PropertyAttribute propertyAttr </span>=<span style="color: #000000;"> (PropertyAttribute)attr;
- </span><span style="color: #0000ff;">if</span> (dicReq.ContainsKey(propertyAttr.FieldName) && propertyAttr.NodeType ==<span style="color: #000000;"> NodeType.Array)
- {
- Tuple</span><<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> tupleFk =<span style="color: #000000;"> GetTupleFKID(propertyAttr.MainEntity, mainEntityName, recordID);
- List</span><<span style="color: #0000ff;">object</span>> listObj =<span style="color: #000000;"> CommonFacade.ParseJsonObjToList(dicReq[propertyAttr.FieldName]);
- listObj.ForEach((inputJsonObj) </span>=><span style="color: #000000;">
- {
- SaveJsonObj(inputJsonObj, propertyAttr.MainEntity, tupleFk);
- });
- }
- }
- }
- }
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span><span style="color: #808080;">///</span><span style="color: #008000;"> 解析输入json对象中的字符串节点
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dicReq"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="properties"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
- <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> ParseStringNode(Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> dicReq, System.Reflection.PropertyInfo[] properties, Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;"> dicTable)
- {
- Tuple</span><<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> tuplePk = <span style="color: #0000ff;">null</span><span style="color: #000000;">;
- System.Attribute[] attrs </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">foreach</span> (System.Reflection.PropertyInfo p <span style="color: #0000ff;">in</span><span style="color: #000000;"> properties)
- {
- attrs </span>=<span style="color: #000000;"> System.Attribute.GetCustomAttributes(p);
- </span><span style="color: #0000ff;">foreach</span> (System.Attribute attr <span style="color: #0000ff;">in</span><span style="color: #000000;"> attrs)
- {
- </span><span style="color: #0000ff;">if</span> (attr <span style="color: #0000ff;">is</span><span style="color: #000000;"> PropertyAttribute)
- {
- PropertyAttribute propertyAttr </span>=<span style="color: #000000;"> (PropertyAttribute)attr;
- </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (dicReq.ContainsKey(propertyAttr.FieldName))
- {
- </span><span style="color: #0000ff;">if</span> (propertyAttr.IsPK ==<span style="color: #000000;"> BooleanType.True)
- {</span><span style="color: #008000;">//</span><span style="color: #008000;">记录主键,备用</span>
- tuplePk = <span style="color: #0000ff;">new</span> Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;">(propertyAttr.ColumnName, dicReq[propertyAttr.FieldName]);
- </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
- }
- </span><span style="color: #0000ff;">if</span> (propertyAttr.IsDeletedFlag ==<span style="color: #000000;"> BooleanType.True)
- {</span><span style="color: #008000;">//</span><span style="color: #008000;">"是否删除" 这个标示列需要特殊处理</span>
- <span style="color: #0000ff;">if</span> (dicReq.ContainsKey(NodeOperation.Operation) && Convert.ToString(dicReq[propertyAttr.FieldName]) ==<span style="color: #000000;"> NodeOperationType.Deleted)
- dicTable.Add(propertyAttr.ColumnName, </span><span style="color: #800080;">1</span><span style="color: #000000;">);
- </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
- }
- </span><span style="color: #0000ff;">if</span> (propertyAttr.NodeType ==<span style="color: #000000;"> NodeType.String)
- dicTable.Add(propertyAttr.ColumnName, dicReq[propertyAttr.FieldName]);
- </span><span style="color: #0000ff;">if</span> (propertyAttr.NodeType ==<span style="color: #000000;"> NodeType.Json)
- dicTable.Add(propertyAttr.ColumnName,CommonFacade.GetPKID(dicReq[propertyAttr.FieldName], propertyAttr.MainEntity));
- }
- }
- }
- }
- </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> tuplePk;
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span><span style="color: #808080;">///</span><span style="color: #008000;"> 将主表ID匹配到从表对应的外键
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="inputJsonObj"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="entityName"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="mainEntityName"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="recordID"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
- <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> GetTupleFKID(<span style="color: #0000ff;">string</span> entityName, <span style="color: #0000ff;">string</span> mainEntityName, <span style="color: #0000ff;">object</span><span style="color: #000000;"> recordID)
- {
- Tuple</span><<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> tupleFK = <span style="color: #0000ff;">null</span><span style="color: #000000;">;
- Type type </span>=<span style="color: #000000;"> CommonFacade.GetEntityType(entityName);
- System.Reflection.PropertyInfo[] properties </span>=<span style="color: #000000;"> type.GetProperties();
- System.Attribute[] attrs </span>= <span style="color: #0000ff;">null</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">foreach</span> (System.Reflection.PropertyInfo p <span style="color: #0000ff;">in</span><span style="color: #000000;"> properties)
- {
- attrs </span>=<span style="color: #000000;"> System.Attribute.GetCustomAttributes(p);
- </span><span style="color: #0000ff;">foreach</span> (System.Attribute attr <span style="color: #0000ff;">in</span><span style="color: #000000;"> attrs)
- {
- </span><span style="color: #0000ff;">if</span> (attr <span style="color: #0000ff;">is</span><span style="color: #000000;"> PropertyAttribute)
- {
- PropertyAttribute propertyAttr </span>=<span style="color: #000000;"> (PropertyAttribute)attr;
- </span><span style="color: #0000ff;">if</span> (propertyAttr.NodeType == NodeType.Json && propertyAttr.MainEntity ==<span style="color: #000000;"> mainEntityName)
- {
- tupleFK </span>= <span style="color: #0000ff;">new</span> Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;">(propertyAttr.ColumnName,recordID);
- </span><span style="color: #0000ff;">goto</span><span style="color: #000000;"> outer;
- }
- }
- }
- }
- outer:
- </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> tupleFK;
- }
- }
- }</span>
四、操作数据库
- <span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Text;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Threading.Tasks;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Data;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Data.SqlClient;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Standard.Frame.Config;
- </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Standard.Frame.DBAccess
- {</span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> PreSqlAccess
- {
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span><span style="color: #808080;">///</span><span style="color: #008000;"> 同步插入记录
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="tablename"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dicTable"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
- <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">object</span> InsertRecordSync(<span style="color: #0000ff;">string</span> tablename, Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;"> dicTable)
- {
- StringBuilder columns </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();
- StringBuilder datas </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();
- List</span><IDataParameter> parameters = <span style="color: #0000ff;">new</span> List<IDataParameter><span style="color: #000000;">();
- </span><span style="color: #0000ff;">foreach</span> (<span style="color: #0000ff;">var</span> item <span style="color: #0000ff;">in</span><span style="color: #000000;"> dicTable)
- {
- columns.Append(item.Key).Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">,</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- datas.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">@</span><span style="color: #800000;">"</span> + item.Key).Append(<span style="color: #800000;">"</span><span style="color: #800000;">,</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- parameters.Add(</span><span style="color: #0000ff;">new</span> SqlParameter(<span style="color: #800000;">"</span><span style="color: #800000;">@</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> item.Key, item.Value));
- }
- StringBuilder sqlCommand </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();
- sqlCommand.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;"> insert into </span><span style="color: #800000;">"</span><span style="color: #000000;">);
- sqlCommand.Append(tablename).Append(</span><span style="color: #800000;">"</span><span style="color: #800000;"> ( </span><span style="color: #800000;">"</span>).Append(columns.ToString().Trim(<span style="color: #0000ff;">new</span> <span style="color: #0000ff;">char</span>[] { <span style="color: #800000;">‘</span><span style="color: #800000;">,</span><span style="color: #800000;">‘</span> })).Append(<span style="color: #800000;">"</span><span style="color: #800000;"> ) </span><span style="color: #800000;">"</span><span style="color: #000000;">);
- sqlCommand.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;"> values ( </span><span style="color: #800000;">"</span>).Append(datas.ToString().Trim(<span style="color: #0000ff;">new</span> <span style="color: #0000ff;">char</span>[] { <span style="color: #800000;">‘</span><span style="color: #800000;">,</span><span style="color: #800000;">‘</span> })).Append(<span style="color: #800000;">"</span><span style="color: #800000;"> ) </span><span style="color: #800000;">"</span><span style="color: #000000;">);
- SqlAccess sqlAccess </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> SqlAccess();
- </span><span style="color: #0000ff;">return</span> sqlAccess.InsertRecordSync(tablename, sqlCommand.ToString(), CommandType.Text, parameters.ToArray(), <span style="color: #0000ff;">null</span><span style="color: #000000;">);
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span><span style="color: #808080;">///</span><span style="color: #008000;"> 同步更新记录
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="tablename"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dicTable"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="tuplePk"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
- <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">object</span> UpdateRecordSync(<span style="color: #0000ff;">string</span> tablename, Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> dicTable, Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>><span style="color: #000000;"> tuplePk)
- {
- StringBuilder columnValues </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();
- List</span><IDataParameter> parameters = <span style="color: #0000ff;">new</span> List<IDataParameter><span style="color: #000000;">();
- </span><span style="color: #0000ff;">foreach</span> (<span style="color: #0000ff;">var</span> item <span style="color: #0000ff;">in</span><span style="color: #000000;"> dicTable)
- {
- columnValues.Append(item.Key).Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">=</span><span style="color: #800000;">"</span>).Append(<span style="color: #800000;">"</span><span style="color: #800000;">@</span><span style="color: #800000;">"</span> + item.Key).Append(<span style="color: #800000;">"</span><span style="color: #800000;">,</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- parameters.Add(</span><span style="color: #0000ff;">new</span> SqlParameter(<span style="color: #800000;">"</span><span style="color: #800000;">@</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> item.Key, item.Value));
- }
- StringBuilder sqlCommand </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();
- sqlCommand.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;"> update </span><span style="color: #800000;">"</span><span style="color: #000000;">).Append(tablename);
- sqlCommand.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;"> set </span><span style="color: #800000;">"</span><span style="color: #000000;">);
- sqlCommand.Append(columnValues.ToString().Trim(</span><span style="color: #0000ff;">new</span> <span style="color: #0000ff;">char</span>[] { <span style="color: #800000;">‘</span><span style="color: #800000;">,</span><span style="color: #800000;">‘</span><span style="color: #000000;"> }));
- sqlCommand.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;"> where </span><span style="color: #800000;">"</span>).Append(tuplePk.Item1).Append(<span style="color: #800000;">"</span><span style="color: #800000;">=</span><span style="color: #800000;">"</span><span style="color: #000000;">).Append(tuplePk.Item2);
- SqlAccess sqlAccess </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> SqlAccess();
- </span><span style="color: #0000ff;">return</span> sqlAccess.ExecuteNonQuerySync(sqlCommand.ToString(), CommandType.Text, parameters.ToArray(), <span style="color: #0000ff;">null</span><span style="color: #000000;">);
- }
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
- <span style="color: #808080;">///</span><span style="color: #008000;"> 插入或者更新记录 返回记录ID
- </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="tablename"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dicTable"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="tuplePk"></param></span>
- <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">object</span> InsertOrUpdateDataSync(<span style="color: #0000ff;">string</span> tablename, Dictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> dicTable, Tuple<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">object</span>> tuplePk = <span style="color: #0000ff;">null</span><span style="color: #000000;">)
- {
- </span><span style="color: #0000ff;">object</span> recordID = <span style="color: #0000ff;">default</span>(<span style="color: #0000ff;">object</span><span style="color: #000000;">);
- </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (dicTable.ContainsKey(NodeOperation.Operation))
- {
- </span><span style="color: #0000ff;">switch</span><span style="color: #000000;"> (Convert.ToString(dicTable[NodeOperation.Operation]))
- {
- </span><span style="color: #0000ff;">case</span><span style="color: #000000;"> NodeOperationType.Added:
- dicTable.Remove(NodeOperation.Operation);
- recordID</span>=<span style="color: #000000;">InsertRecordSync(tablename, dicTable);
- </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">case</span><span style="color: #000000;"> NodeOperationType.Changed:
- </span><span style="color: #0000ff;">case</span><span style="color: #000000;"> NodeOperationType.Deleted:
- dicTable.Remove(NodeOperation.Operation);
- recordID </span>=<span style="color: #000000;"> tuplePk.Item2;
- UpdateRecordSync(tablename, dicTable, tuplePk);
- </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">default</span>: ; <span style="color: #0000ff;">break</span><span style="color: #000000;">;
- }
- }
- </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> recordID;
- }
- }
- }</span>
将json对象数据保存到数据库对应的表中
标签: