<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      EDP .Net開發(fā)框架--業(yè)務(wù)模型

      平臺(tái)下載地址:https://gitee.com/alwaysinsist/edp


      業(yè)務(wù)模型概述

      業(yè)務(wù)模型管理中所涉及的業(yè)務(wù)模型,業(yè)務(wù)模型的屬性,業(yè)務(wù)模型的視圖都是可以通過權(quán)限設(shè)置來實(shí)現(xiàn)數(shù)據(jù)的行(視圖),列(屬性)權(quán)限管控。業(yè)務(wù)模型是整個(gè)EDP平臺(tái)的核心基礎(chǔ),數(shù)據(jù)的查詢、新增、修改、刪除、行列權(quán)限都是通過業(yè)務(wù)模型來實(shí)現(xiàn)的。

      業(yè)務(wù)模型管理

      按分類管理系統(tǒng)內(nèi)各個(gè)業(yè)務(wù)模型,對(duì)應(yīng)系統(tǒng)中各個(gè)業(yè)務(wù)對(duì)象。

      業(yè)務(wù)模型分類

      管理業(yè)務(wù)模型分類。
      image

      業(yè)務(wù)模型

      • 新增業(yè)務(wù)模型
        image
        image

      • 編輯業(yè)務(wù)模型
        image
        image
        image

      • 業(yè)務(wù)模型代碼生成
        image
        image

        表設(shè)計(jì)文檔模板,可以包含多個(gè)表結(jié)構(gòu)設(shè)計(jì)
        image

      業(yè)務(wù)模型開發(fā)

      定義業(yè)務(wù)模型

      創(chuàng)建業(yè)務(wù)模型類,繼承基類ModelPermissionBase。定義好的業(yè)務(wù)模型可以在上述的業(yè)務(wù)模型管理功能中進(jìn)行管理,實(shí)現(xiàn)數(shù)據(jù)行、列權(quán)限的管控。

      點(diǎn)擊查看代碼
      using System;
      
      namespace School.Model
      {    
          using EDP.Common.Model;
          using EDP.Common.Help;
      
          using EDP.Database;
          using EDP.Framework;
      
          using EDP.Authentication;    
      
          /// <summary>
          /// 學(xué)生業(yè)務(wù)對(duì)象
          /// </summary>
          [ModelEnitity(TableName = "t_school_student", KeyName = "ID")]
          public class StudentModel: ModelPermissionBase
          {
              /// <summary>
              /// 構(gòu)造函數(shù)
              /// </summary>
              public StudentModel() {
                  this.SetDefaultQuerySQL(@"select * 
      	from (select a.ID
      			,a.Name
      			,a.Number
      			,a.GenderId
      			,a.Age
      			,a.Contact
      			,a.ContactMobile
      			,a.Hobby
      			,a.CampusId
      			,a.ClassId
      			,a.CreateUserId
      			,a.CreateUserName
      			,a.CreateDepartmentId
      			,a.CreateOrganizationId
      			,a.CreateTime
      			,a.ModifyUserId
      			,a.ModifyUserName
      			,a.ModifyTime
      			,a.Remarks
      			,b.Name CampusName
      			,c.Name ClassName
      			,d.Name SchoolName
      			,c.FullCode ClassFullCode
      		from t_school_student a
      		left join t_sys_organization_unit b on a.CampusId = b.ID
      		left join t_sys_organization_unit c on a.ClassId = c.ID
      		left join t_sys_organization_unit d on c.FullCode like d.FullCode + '%' and d.Levels = c.Levels - 3) tab");
              }
      
              #region **----實(shí)體屬性---------------------------**
              /// <summary>
              /// 主鍵ID
              /// </summary>
              [ModelEnitity(ColumnName = "ID")]
              public string ID { get; set; }
      
              /// <summary>
              /// 姓名
              /// </summary>
              [ModelEnitity(ColumnName = "Name", IsRequired = true, MaxLength = 50)]
              public string Name { get; set; }
      
              /// <summary>
              /// 編號(hào)
              /// <summary>
              [ModelEnitity(ColumnName = "Number")]
              public string Number { get; set; }
      
              /// <summary>
              /// 性別ID
              /// </summary>
              [ModelEnitity(ColumnName = "GenderId", IsRequired = true)]
              public int? GenderId { get; set; }
      
              /// <summary>
              /// 年齡
              /// </summary>
              [ModelEnitity(ColumnName = "Age", IsRequired = true)]
              public int? Age { get; set; }
      
              /// <summary>
              /// 聯(lián)系人
              /// </summary>
              [ModelEnitity(ColumnName = "Contact", MaxLength = 50)]
              public string Contact { get; set; }
      
              /// <summary>
              /// 聯(lián)系人手機(jī)
              /// </summary>
              [ModelEnitity(ColumnName = "ContactMobile", Regex = @"^[1]([3-9])[0-9]{9}$")]
              public string ContactMobile { get; set; }
      
              /// <summary>
              /// 興趣愛好
              /// </summary>
              [ModelEnitity(ColumnName = "Hobby", MaxLength = 500)]
              public string Hobby { get; set; }
      
              /// <summary>
              /// 校區(qū)ID
              /// </summary>
              [ModelEnitity(ColumnName = "CampusId")]
              public string CampusId { get; set; }
      
              /// <summary>
              /// 班級(jí)ID
              /// </summary>
              [ModelEnitity(ColumnName = "ClassId", IsRequired = true)]
              public string ClassId { get; set; }
      
              /// <summary>
              /// 創(chuàng)建人ID
              /// </summary>
              [ModelEnitity(ColumnName = "CreateUserId")]
              public string CreateUserId { get; set; }
      
              /// <summary>
              /// 創(chuàng)建人
              /// </summary>
              [ModelEnitity(ColumnName = "CreateUserName")]
              public string CreateUserName { get; set; }
      
              /// <summary>
              /// 創(chuàng)建部門ID
              /// </summary>
              [ModelEnitity(ColumnName = "CreateDepartmentId")]
              public string CreateDepartmentId { get; set; }
      
              /// <summary>
              /// 創(chuàng)建機(jī)構(gòu)ID
              /// </summary>
              [ModelEnitity(ColumnName = "CreateOrganizationId")]
              public string CreateOrganizationId { get; set; }
      
              /// <summary>
              /// 創(chuàng)建時(shí)間
              /// </summary>
              [ModelEnitity(ColumnName = "CreateTime")]
              public DateTime? CreateTime { get; set; }
      
              /// <summary>
              /// 修改人ID
              /// </summary>
              [ModelEnitity(ColumnName = "ModifyUserId")]
              public string ModifyUserId { get; set; }
      
              /// <summary>
              /// 修改人
              /// </summary>
              [ModelEnitity(ColumnName = "ModifyUserName")]
              public string ModifyUserName { get; set; }
      
              /// <summary>
              /// 修改時(shí)間
              /// </summary>
              [ModelEnitity(ColumnName = "ModifyTime")]
              public DateTime? ModifyTime { get; set; }
      
              /// <summary>
              /// 備注
              /// </summary>
              [ModelEnitity(ColumnName = "Remarks", MaxLength = 1000)]
              public string Remarks { get; set; }
              #endregion
      
              #region **----擴(kuò)展屬性---------------------------**
              /// <summary>
              /// 校區(qū)名稱
              /// </summary>
              public string CampusName { get; set; }
      
              /// <summary>
              /// 學(xué)校名稱
              /// </summary>
              public string SchoolName { get; set; }
      
              /// <summary>
              /// 班級(jí)名稱
              /// </summary>
              public string ClassName { get; set; }
      
              /// <summary>
              /// 性別@readonly
              /// </summary>
              public GenderEnum Gender {
                  get {
                      GenderEnum ret = GenderEnum.None;
                      if (this.GenderId.HasValue) {
                          try { ret = (GenderEnum)this.GenderId; }
                          catch { }
                      }
                      return ret;
                  }
              }
      
              /// <summary>
              /// 性別顯示@readonly
              /// </summary>
              public string GenderDisplay {
                  get {
                      return EnumHelp.GetEnumDescription(this.Gender);
                  }
              }
      
              /// <summary>
              /// 班級(jí)全編碼
              /// </summary>
              public string ClassFullCode { get; set; }
      
              /// <summary>
              /// 學(xué)校
              /// </summary>
              public Organization.OrganizationModel School { get; set; } = new Organization.OrganizationModel();
              #endregion
      
              #region **----方法-------------------------------**
              /// <summary>
              /// 創(chuàng)建當(dāng)前實(shí)體對(duì)象
              /// </summary>
              /// <param name="db">數(shù)據(jù)庫接口</param>
              public void Create(IDBInstance db = null) {
                  if (string.IsNullOrWhiteSpace(this.ID))
                      this.ID = Guid.NewGuid().ToString();
      
                  var loginUser = AuthenticationHelp.GetLoginUser(db);
                  if (loginUser != null && loginUser.IsLogin) {
                      this.CreateUserId = loginUser.UserInfo.ID;
                      this.CreateUserName = loginUser.UserInfo.Name;
                      this.CreateDepartmentId = loginUser.UserInfo.DepartmentId;
                      this.CreateOrganizationId = loginUser.UserInfo.OrganizationId;
                  }
      
                  this.CreateTime = DateTime.Now;
                  this.ModifyTime = null;
                  this.ModifyUserId = null;
                  this.ModifyUserName = null;
              }
      
              /// <summary>
              /// 修改當(dāng)前實(shí)體對(duì)象
              /// </summary>
              /// <param name="db">數(shù)據(jù)庫接口</param>
              public void Modify(IDBInstance db = null) {
                  this.ModifyTime = DateTime.Now;
      
                  var loginUser = AuthenticationHelp.GetLoginUser(db);
                  if (loginUser != null && loginUser.IsLogin) {
                      this.ModifyUserId = loginUser.UserInfo.ID;
                      this.ModifyUserName = loginUser.UserInfo.Name;
                  }
      
                  this.ModifyTime = DateTime.Now;
                  this.CreateDepartmentId = null;
                  this.CreateOrganizationId = null;
                  this.CreateTime = null;
                  this.CreateUserId = null;
                  this.CreateUserName = null;
              }
      
              /// <summary>
              /// 修改當(dāng)前實(shí)體對(duì)象
              /// </summary>
              /// <param name="keyValue">主鍵值</param>
              /// <param name="db">數(shù)據(jù)庫接口</param>
              public void Modify(string keyValue, IDBInstance db = null) {
                  this.ID = keyValue;
                  this.Modify(db);
              }
              #endregion
          }
      }
      

      image

      [ModelEnitity(TableName = "t_school_student", KeyName = "ID")]
      TableName:表名
      KeyName:主鍵對(duì)應(yīng)的屬性名

      [ModelEnitity(ColumnName = "Name", IsRequired = true, MaxLength = 50)]
      ColumnName:字段名稱
      IsRequired:是否必須,用于驗(yàn)證屬性值是否必須有值
      MaxLength:最大長(zhǎng)度,屬性值的最大長(zhǎng)度

      [ModelEnitity(ColumnName = "ContactMobile", Regex = @"^[1]([3-9])[0-9]{9}$")]
      Regex:正則表達(dá)式,用于驗(yàn)證屬性值格式

      點(diǎn)擊查看代碼
      /// <summary>
      /// 構(gòu)造函數(shù)
      /// </summary>
      public StudentModel() {
                  this.SetDefaultQuerySQL(@"select * 
      	from (select a.ID
      			,a.Name
      			,a.Number
      			,a.GenderId
      			,a.Age
      			,a.Contact
      			,a.ContactMobile
      			,a.Hobby
      			,a.CampusId
      			,a.ClassId
      			,a.CreateUserId
      			,a.CreateUserName
      			,a.CreateDepartmentId
      			,a.CreateOrganizationId
      			,a.CreateTime
      			,a.ModifyUserId
      			,a.ModifyUserName
      			,a.ModifyTime
      			,a.Remarks
      			,b.Name CampusName
      			,c.Name ClassName
      			,d.Name SchoolName
      			,c.FullCode ClassFullCode
      		from t_school_student a
      		left join t_sys_organization_unit b on a.CampusId = b.ID
      		left join t_sys_organization_unit c on a.ClassId = c.ID
      		left join t_sys_organization_unit d on c.FullCode like d.FullCode + '%' and d.Levels = c.Levels - 3) tab");
      
                  //引入命名空間 using EDP.Common;
                  //default:注冊(cè)表配置中數(shù)據(jù)庫連接配置所對(duì)應(yīng)的"Key"值
                  //若沒有設(shè)置連線字串,則取注冊(cè)表配置中的默認(rèn)數(shù)據(jù)庫連接
                  //this.SetConnectionString(Config.Database["default"]); 示例項(xiàng)目使用默認(rèn)數(shù)據(jù)庫連接,不需要設(shè)置
              }
      
      在構(gòu)造函數(shù)中通過SetDefaultQuerySQL()方法設(shè)置默認(rèn)查詢SQL,通過SetConnectionString()方法設(shè)置數(shù)據(jù)庫連接字符串(若沒設(shè)置則取默認(rèn)數(shù)據(jù)庫連接字串)。

      public string CampusName { get; set; }
      擴(kuò)展屬性是默認(rèn)查詢SQL中所查詢的非業(yè)務(wù)模型映射的表中的字段。

      點(diǎn)擊查看代碼
      /// <summary>
      /// 創(chuàng)建當(dāng)前實(shí)體對(duì)象
      /// </summary>
      /// <param name="db">數(shù)據(jù)庫接口</param>
      public void Create(IDBInstance db = null) {
          if (string.IsNullOrWhiteSpace(this.ID))
              this.ID = Guid.NewGuid().ToString();
      
          var loginUser = AuthenticationHelp.GetLoginUser(db);
          if (loginUser != null && loginUser.IsLogin) {
              this.CreateUserId = loginUser.UserInfo.ID;
              this.CreateUserName = loginUser.UserInfo.Name;
              this.CreateDepartmentId = loginUser.UserInfo.DepartmentId;
              this.CreateOrganizationId = loginUser.UserInfo.OrganizationId;
          }
      
          this.CreateTime = DateTime.Now;
          this.ModifyTime = null;
          this.ModifyUserId = null;
          this.ModifyUserName = null;
      }
      
      /// <summary>
      /// 修改當(dāng)前實(shí)體對(duì)象
      /// </summary>
      /// <param name="db">數(shù)據(jù)庫接口</param>
      public void Modify(IDBInstance db = null) {
          this.ModifyTime = DateTime.Now;
      
          var loginUser = AuthenticationHelp.GetLoginUser(db);
          if (loginUser != null && loginUser.IsLogin) {
              this.ModifyUserId = loginUser.UserInfo.ID;
              this.ModifyUserName = loginUser.UserInfo.Name;
          }
      
          this.ModifyTime = DateTime.Now;
          this.CreateDepartmentId = null;
          this.CreateOrganizationId = null;
          this.CreateTime = null;
          this.CreateUserId = null;
          this.CreateUserName = null;
      }
      
      /// <summary>
      /// 修改當(dāng)前實(shí)體對(duì)象
      /// </summary>
      /// <param name="keyValue">主鍵值</param>
      /// <param name="db">數(shù)據(jù)庫接口</param>
      public void Modify(string keyValue, IDBInstance db = null) {
          this.ID = keyValue;
          this.Modify(db);
      }
      
      在業(yè)務(wù)對(duì)象上提供Create()和Modify()擴(kuò)展方法,用于在創(chuàng)建和修改業(yè)務(wù)時(shí)調(diào)用,給業(yè)務(wù)對(duì)象必要屬性賦值。

      定義查詢對(duì)象

      查詢對(duì)象是用來實(shí)現(xiàn)業(yè)務(wù)對(duì)象的查詢,通過屬性來設(shè)置查詢條件。需要繼承QueryModelBase基類。

      點(diǎn)擊查看代碼
      using System;
      
      namespace School.Model
      {
          using EDP.Common;
          using EDP.Common.Model;
      
          /// <summary>
          /// 學(xué)生信息查詢對(duì)象
          /// </summary>
          [QueryModel] //標(biāo)記類的查詢對(duì)象特性
          public class StudentQueryModel : QueryModelBase //繼承QueryModelBase
          {
              /// <summary>
              /// 姓名
              /// </summary>
              [QueryModel(Operator = QueryOperator.like, ColumnName = "Name")]
              public string Name { get; set; }
      
              /// <summary>
              /// 性別
              /// </summary>
              [QueryModel(Operator = QueryOperator.eq, ColumnName = "GenderId")]
              public int? GenderId { get; set; }
      
              /// <summary>
              /// 校區(qū)
              /// </summary>
              [QueryModel(Operator = QueryOperator.eq, ColumnName = "CampusId")]
              public string CampusId { get; set; }
      
              /// <summary>
              /// 班級(jí)
              /// </summary>
              [QueryModel(Operator = QueryOperator.eq, ColumnName = "ClassId")]
              public string ClassId { get; set; }
      
              /// <summary>
              /// 班級(jí)全編碼
              /// </summary>
              /// <example>ClassFullCode like '值%'</example>
              [QueryModel(Operator = QueryOperator.likeRight, ColumnName = "ClassFullCode")]
              public string ClassFullCode { get; set; }
      
              /// <summary>
              /// 編號(hào)姓名關(guān)鍵字
              /// Number和Name都進(jìn)行l(wèi)ike查詢
              /// </summary>
              /// <example>Number like '%關(guān)鍵字%' or Name like '%值%'</example>
              [QueryModel(Operator = QueryOperator.like, ColumnNameList = "Number;Name")]
              public string NumberNameKeywrod { get; set; }
      
              /// <summary>
              /// 分頁對(duì)象
              /// </summary>
              public PageModel Page { get; set; } = new PageModel();
          }
      }
      

      [QueryModel(Operator = QueryOperator.like, ColumnName = "Name")]
      Operator:查詢操作符(=、>、<、>=、like等)
      ColumnName:對(duì)應(yīng)業(yè)務(wù)對(duì)象的屬性(實(shí)體屬性,擴(kuò)展屬性),只要是默認(rèn)查詢SQL中包含的字段都可以作為查詢對(duì)象的屬性(查詢條件)

      業(yè)務(wù)模型使用

      • 業(yè)務(wù)模型屬性驗(yàn)證
        var verify = item.Verify(keyValue);
        此處通過Verify()方法驗(yàn)證業(yè)務(wù)模型各屬性值,通過屬性驗(yàn)證標(biāo)記(IsRequired,MaxLength, Regex)進(jìn)行驗(yàn)證。

      • 業(yè)務(wù)模型新增

      點(diǎn)擊查看代碼
      item.Create(db);
      item.ValidateSQL = string.Format("where not exists (select 1 from t_school_student where Number = '{0}')", item.Number);
      result = item.InsertModel(db);
      
      通過業(yè)務(wù)模型Create()方法創(chuàng)建當(dāng)前實(shí)體對(duì)象。
      通過ValidateSQL屬性值確保不會(huì)有重復(fù)的Number值插入到數(shù)據(jù)庫。
      調(diào)用InsertModel()方法新增業(yè)務(wù)模型數(shù)據(jù)。
      
      • 業(yè)務(wù)模型修改
      點(diǎn)擊查看代碼
      item.Modify(keyValue, db);
      item.Number = null; //編號(hào)不能修改
      result = item.UpdateModel(db);
      
      通過業(yè)務(wù)模型Modify()方法修改當(dāng)前實(shí)體對(duì)象。
      調(diào)用UpdateModel()方法修改業(yè)務(wù)模型數(shù)據(jù)。
      
      • 業(yè)務(wù)模型查詢
      點(diǎn)擊查看代碼
      ResultModel<StudentModel> ret = new ResultModel<StudentModel>();
      ret.Content = new StudentModel();
      ret.KeyValue = keyValue;
      ret.Content.ID = keyValue;
      ret.Content.Query(db);
      
      使用統(tǒng)一的返回對(duì)象 ResultModel<StudentModel>。
      實(shí)例化ret.Content并設(shè)置操作的主鍵值ret.KeyValue = keyValue。
      設(shè)置查詢的主鍵值 ret.Content.ID = keyValue。
      調(diào)用業(yè)務(wù)對(duì)象Query()方法 ret.Content.Query(db)。
      執(zhí)行Query()查詢后,根據(jù)權(quán)限設(shè)置給ret.Content賦值。
      ret.Content.AccessPropertyList中返回有權(quán)限的屬性名稱。
      
      • 業(yè)務(wù)模型列表查詢
      點(diǎn)擊查看代碼
      ResultModel<List<StudentModel>> ret = new ResultModel<List<StudentModel>>();
      ret.Content = new List<StudentModel>();
      ret.Content.Query(queryModel.Page, queryModel, db);
      ret.Page = queryModel.Page;
      
      使用統(tǒng)一的返回對(duì)象 ResultModel<List<StudentModel>>。
      實(shí)例化 ret.Content = new List<StudentModel>()。
      調(diào)用業(yè)務(wù)對(duì)象Query()方法 ret.Content.Query(queryModel.Page, queryModel, db)。
      queryModel為查詢對(duì)象StudentQueryModel的實(shí)例。
      執(zhí)行Query()查詢后,根據(jù)權(quán)限設(shè)置給ret.Content賦值(有權(quán)限的數(shù)據(jù)集合)。
      ret.Content[0].AccessPropertyList中返回有權(quán)限的屬性名稱。
      
      • 業(yè)務(wù)模型刪除
      點(diǎn)擊查看代碼
      StudentModel item = new StudentModel();
      item.Id = keyValue;
      item.DeleteModel();
      
      實(shí)例化StudentModel。
      設(shè)置主鍵值 item.Id = keyValue。
      調(diào)用業(yè)務(wù)對(duì)象DeleteModel()方法 item.DeleteModel()。
      
      posted @ 2024-05-19 20:02  風(fēng)輕·雲(yún)淡  閱讀(1328)  評(píng)論(5)    收藏  舉報(bào)
      主站蜘蛛池模板: 91色老久久精品偷偷性色 | 久久国产精品免费一区| 国产老头多毛Gay老年男| 性做久久久久久久久| 中文字幕av国产精品| 亚洲一级特黄大片一级特黄| 亚洲人成人影院在线观看| 日韩精品亚洲国产成人av| 午夜大片免费男女爽爽影院| 英超| 亚洲天堂亚洲天堂亚洲色图| 人妻中文字幕亚洲精品| 在线日韩日本国产亚洲| 亚洲第一无码AV无码专区| 国产高清不卡视频| 国产午夜精品视频在线播放 | 国产精品一区二区 尿失禁| 久久夜色精品久久噜噜亚| 亚洲熟女精品一区二区| 精品国产美女福到在线不卡| 深夜av在线免费观看| 亚洲精品欧美综合二区| 精品久久久久久无码人妻蜜桃| 亚洲中文字幕第一页在线| 日产国产一区二区不卡| 翘臀少妇被扒开屁股日出水爆乳| 欧美国产综合欧美视频| 亚洲 欧美 综合 另类 中字| 免费可以在线看a∨网站| 日韩精品一二区在线观看| 女厕偷窥一区二区三区| 国产SM重味一区二区三区| 免费大黄网站在线观看| 欧美在线一区二区三区精品| 久久99精品久久久久麻豆| 东京热tokyo综合久久精品| 91毛片网| 青青国产揄拍视频| 国产高清视频一区二区乱| 性动态图无遮挡试看30秒| 成人免费无遮挡在线播放|