上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计。

先看下下面菜单实体示例代码:

using Rookey.Frame.EntityBase;
using Rookey.Frame.EntityBase.Attr;
using Rookey.Frame.Model.EnumSpace;
using ServiceStack.DataAnnotations;
using System; namespace Rookey.Frame.Model.Sys
{
/// <summary>
/// 菜单管理
/// </summary>
[ModuleConfig(Name = "菜单管理", Sort = , PrimaryKeyFields = "Name", TitleKey = "Name", StandardJsFolder = "System")]
public class Sys_Menu : BaseSysEntity
{
/// <summary>
/// 菜单名称
/// </summary>
[FieldConfig(Display = "菜单名称", RowNum = , ColNum = , IsFrozen = true, IsUnique = true, IsRequired = true, HeadSort = )]
[StringLength()]
public string Name { get; set; } /// <summary>
/// 显示名称
/// </summary>
[FieldConfig(Display = "显示名称", RowNum = , ColNum = , IsRequired = true,DefaultValue="{Name}", HeadSort = )]
[StringLength()]
public string Display { get; set; } /// <summary>
/// 上级菜单Id
/// </summary>
[FieldConfig(Display = "上级菜单", ControlType = (int)ControlTypeEnum.ComboTree, Url = "/SystemAsync/LoadFolderMenuTree.html", RowNum = , ColNum = , HeadSort = , ForeignModuleName = "菜单管理")]
public Guid? ParentId { get; set; } /// <summary>
/// 上级菜单名称
/// </summary>
[Ignore]
public string ParentName { get; set; } /// <summary>
/// 模块Id
/// </summary>
[FieldConfig(Display = "模块", ControlType = (int)ControlTypeEnum.ComboBox, RowNum = , ColNum = , HeadSort = , ForeignModuleName = "模块管理")]
public Guid? Sys_ModuleId { get; set; } /// <summary>
/// 模块名称
/// </summary>
[Ignore]
public string Sys_ModuleName { get; set; } /// <summary>
/// 排序
/// </summary>
[FieldConfig(Display = "排序", ControlType = (int)ControlTypeEnum.IntegerBox, RowNum = , ColNum = , HeadSort = )]
public int Sort { get; set; } /// <summary>
/// 是否启用
/// </summary>
[FieldConfig(Display = "是否启用", ControlType = (int)ControlTypeEnum.SingleCheckBox, RowNum = , ColNum = , HeadSort = )]
public bool IsValid { get; set; } /// <summary>
/// 是否是叶子节点
/// </summary>
[FieldConfig(Display = "叶子节点", RowNum = , ColNum = , ControlType = (int)ControlTypeEnum.SingleCheckBox, HeadSort = )]
public bool IsLeaf { get; set; } /// <summary>
/// 菜单图标
/// </summary>
[FieldConfig(Display = "菜单图标", ControlType = (int)ControlTypeEnum.IconBox, RowNum = , ColNum = , IsAllowGridSearch = false, HeadSort = )]
[StringLength()]
public string Icon { get; set; } /// <summary>
/// 菜单URL
/// </summary>
[FieldConfig(Display = "菜单URL", RowNum = , ColNum = , HeadSort = , ControlWidth = , HeadWidth = )]
[StringLength()]
public string Url { get; set; } /// <summary>
/// 新窗口打开
/// </summary>
[FieldConfig(Display = "新窗口打开", ControlType = (int)ControlTypeEnum.SingleCheckBox, RowNum = , ColNum = , HeadSort = )]
public bool IsNewWinOpen { get; set; } /// <summary>
/// 菜单路径
/// </summary>
//public string TreeValuePath { get; set; }
}

示例中BaseSysEntity为系统基类,所有实体基类必须继承自Rookey.Frame.EntityBase中的BaseEntity,在BaseEntity顶层基类中定义了公共字段:

        /// <summary>
/// ID 主键ID
/// </summary>
[FieldConfig(Display = "ID", IsEnableForm = false, IsAllowGridSearch = false, HeadWidth = , HeadSort = )]
public Guid Id { get; set; } /// <summary>
/// 创建人ID
/// </summary>
[FieldConfig(Display = "创建人", HeadWidth = , IsEnableForm = false, IsAllowEdit = false, IsAllowCopy = false, IsAllowBatchEdit = false, HeadSort = , ForeignModuleName = "用户管理")]
public Guid? CreateUserId { get; set; } /// <summary>
/// 修改人ID
/// </summary>
[FieldConfig(Display = "修改人", HeadWidth = , IsEnableForm = false, HeadSort = , ForeignModuleName = "用户管理")]
public Guid? ModifyUserId { get; set; } /// <summary>
/// 创建人
/// </summary>
[NoField]
[StringLength()]
public string CreateUserName { get; set; } /// <summary>
/// 修改人
/// </summary>
[NoField]
[StringLength()]
public string ModifyUserName { get; set; } /// <summary>
/// 创建日期
/// </summary>
[FieldConfig(Display = "创建日期", IsEnableForm = false, IsAllowEdit = false, IsAllowCopy = false, IsAllowBatchEdit = false, HeadWidth = , HeadSort = )]
public DateTime? CreateDate { get; set; } /// <summary>
/// 修改日期
/// </summary>
[FieldConfig(Display = "修改日期", IsEnableForm = false, HeadWidth = , HeadSort = )]
public DateTime? ModifyDate { get; set; } /// <summary>
/// 是否删除,软删除、回收站需要用到
/// </summary>
[NoField]
[Default(typeof(bool), "")]
public bool IsDeleted { get; set; } /// <summary>
/// 删除时间
/// </summary>
[NoField]
public DateTime? DeleteTime { get; set; } /// <summary>
/// 是否草稿,草稿箱标识
/// </summary>
[NoField]
[Default(typeof(bool), "")]
public bool IsDraft { get; set; } /// <summary>
/// 单据所属组织,数据权限中使用到
/// </summary>
[NoField]
public Guid? OrgId { get; set; }

在菜单实体类中,类属性标记[ModuleConfig(Name = "菜单管理", Sort = 4, PrimaryKeyFields = "Name", TitleKey = "Name", StandardJsFolder = "System")],是对菜单模块定义,模块名称为“菜单管理”,排序为4,决定表的唯一记录的字段(多个字段以英文逗号分隔)为“Name”,TitleKey字段为“Name”,StandardJsFolder前端JS(/Scripts/model)下的所属文件夹,还有其他参数定义可以看下ModuleConfigAttribute类的定义

    /// <summary>
/// 模块配置属性类
/// </summary>
public class ModuleConfigAttribute : Attribute
{
/// <summary>
/// 构造函数
/// </summary>
public ModuleConfigAttribute()
{
Sort = ;
IsAllowAdd = true;
IsAllowEdit = true;
IsAllowDelete = true;
} /// <summary>
/// 数据表名
/// </summary>
public string TableName { get; set; } /// <summary>
/// 数据来源类型
/// </summary>
public int DataSourceType { get; set; } /// <summary>
/// 父模块名称
/// </summary>
public string ParentName { get; set; } /// <summary>
/// 模块名称
/// </summary>
public string Name { get; set; } /// <summary>
/// 模块标题列
/// </summary>
public string TitleKey { get; set; } /// <summary>
/// 主键字段,记录唯一标识,可以是多个字段
/// </summary>
public string PrimaryKeyFields { get; set; } /// <summary>
/// 模块图标
/// </summary>
public string Logo { get; set; } /// <summary>
/// 是否允许新增
/// </summary>
public bool IsAllowAdd { get; set; } /// <summary>
/// 是否允许编辑
/// </summary>
public bool IsAllowEdit { get; set; } /// <summary>
/// 是否允许删除
/// </summary>
public bool IsAllowDelete { get; set; } /// <summary>
/// 是否允许复制
/// </summary>
public bool IsAllowCopy { get; set; } /// <summary>
/// 是否允许导入
/// </summary>
public bool IsAllowImport { get; set; } /// <summary>
/// 是否允许导出
/// </summary>
public bool IsAllowExport { get; set; } /// <summary>
/// 是否启用附件
/// </summary>
public bool IsEnableAttachment { get; set; } /// <summary>
/// 是否启用回收站
/// </summary>
public bool IsEnabledRecycle { get; set; } /// <summary>
/// 是否启用批量编辑
/// </summary>
public bool IsEnabledBatchEdit { get; set; } /// <summary>
/// 是否允许打印
/// </summary>
public bool IsEnabledPrint { get; set; } /// <summary>
/// 排序编码
/// </summary>
public int Sort { get; set; } /// <summary>
/// 标准JS所属文件夹
/// </summary>
public string StandardJsFolder { get; set; } /// <summary>
/// 引用的其他JS文件
/// </summary>
public string OtherJs { get; set; }
}

对实体类添加该属性标记后,系统初始化时会自动将相关参数初始化到系统中,对于需要自动化表单、列表、权限、流程、字段等相关处理的模块最好加上该配置,对于像权限、日志、监控等相关数据表不需要处理表单、列表等时则可以不需要添加该标记而以[NoModule]来替换,对于后面讲到的字段标记[FieldConfig]也是一样,如果不需要将字段纳入管理时以[NoField]替换,对于既没有添加[ModuleConfig]标记也没有添加[NoModule]标记的实体类,系统会以默认参数的方式初始化,字段也一样,详细请看初始化代码部分。

下面看下字段配置:

    /// <summary>
/// 表单字段配置
/// </summary>
public class FieldConfigAttribute : Attribute
{
/// <summary>
/// 构造函数
/// </summary>
public FieldConfigAttribute()
{
IsAllowAdd = true;
IsAllowEdit = true;
IsAllowBatchEdit = false;
IsAllowCopy = false;
IsAllowGridSearch = true;
ControlType = ; //默认为Textbox控件
ControlWidth = ; //默认控件宽度为180
IsFormVisible = true;
MinCharLen = ;
MaxCharLen = ;
IsRequired = false;
IsUnique = false;
RowNum = ;
ColNum = ; HeadWidth = ; //网格列宽默认120
IsFrozen = false; //是否为冻结字段
IsGroupField = false; //是否为分组字段
IsGridVisible = true; //字段在网格中是否可见
HeadSort = ; IsEnableForm = true; //默认启用表单,启用表单后才会初始化表单字段
IsEnableGrid = true; //默认启用网格,启用网格后才会初始化网格字段 FieldLen = ; //默认字段长度为300(数据表字段)
} /// <summary>
/// 字段名称
/// </summary>
public string FieldName { get; set; } /// <summary>
/// 字段类型(针对数据库)
/// </summary>
public string FieldType { get; set; } /// <summary>
/// 字段长度(针对数据库)
/// </summary>
public int FieldLen { get; set; } /// <summary>
/// 字段显示名称
/// </summary>
public string Display { get; set; } /// <summary>
/// 外键模块名称,定义外键字段时该字段不能为空
/// </summary>
public string ForeignModuleName { get; set; } /// <summary>
/// 输入控件后的注释内容
/// </summary>
public string AfterContent { get; set; } #region 表单配置 /// <summary>
/// 是否是启用表单字段配置,为否是将不会插入到表单字段表中
/// </summary>
public bool IsEnableForm { get; set; } /// <summary>
/// 控件类型
/// </summary>
public int ControlType { get; set; } /// <summary>
/// 是否是表单显示控件
/// </summary>
public bool IsFormVisible { get; set; } /// <summary>
/// 控件宽度
/// </summary>
public int ControlWidth { get; set; } /// <summary>
/// 默认值
/// </summary>
public string DefaultValue { get; set; } /// <summary>
/// 最小字符长度
/// </summary>
public int MinCharLen { get; set; } /// <summary>
/// 最大字符长度
/// </summary>
public int MaxCharLen { get; set; } /// <summary>
/// 是否必填
/// </summary>
public bool IsRequired { get; set; } /// <summary>
/// 是否唯一
/// </summary>
public bool IsUnique { get; set; } /// <summary>
/// 是否允许新增
/// </summary>
public bool IsAllowAdd { get; set; } /// <summary>
/// 是否允许编辑
/// </summary>
public bool IsAllowEdit { get; set; } /// <summary>
/// 是否允许批量编辑
/// </summary>
public bool IsAllowBatchEdit { get; set; } /// <summary>
/// 是否允许复制
/// </summary>
public bool IsAllowCopy { get; set; } /// <summary>
/// 表单行号,从1开始
/// </summary>
public int RowNum { get; set; } /// <summary>
/// 表单列号,从1开始
/// </summary>
public int ColNum { get; set; } /// <summary>
/// 分组名称
/// </summary>
public string GroupName { get; set; } /// <summary>
/// 分组图标
/// </summary>
public string GroupIcon { get; set; } /// <summary>
/// 标签页名称
/// </summary>
public string TabName { get; set; } /// <summary>
/// 标签页图标
/// </summary>
public string TabIcon { get; set; } /// <summary>
/// 空文本时提示文字
/// </summary>
public string NullTipText { get; set; } /// <summary>
/// 值字段名
/// </summary>
public string ValueField { get; set; } /// <summary>
/// 文本字段名
/// </summary>
public string TextField { get; set; } /// <summary>
/// 数据加载Url
/// </summary>
public string Url { get; set; } /// <summary>
/// 是否多选
/// </summary>
public bool IsMultiSelect { get; set; } #endregion #region 列表配置 /// <summary>
/// 是否是启用视图字段配置,为否是将不会插入到视图字段表中
/// </summary>
public bool IsEnableGrid { get; set; } /// <summary>
/// 视图字段宽度
/// </summary>
public int HeadWidth { get; set; } /// <summary>
/// 是否冻结
/// </summary>
public bool IsFrozen { get; set; } /// <summary>
/// 是否分组字段
/// </summary>
public bool IsGroupField { get; set; } /// <summary>
/// 是否可见
/// </summary>
public bool IsGridVisible { get; set; } /// <summary>
/// 列头排序编号,从0开始
/// </summary>
public int HeadSort { get; set; } /// <summary>
/// 是否允许列表中搜索
/// </summary>
public bool IsAllowGridSearch { get; set; } #endregion
}

对于实体中只是显示字段,不需要初始化为表字段时将字段添加[Ignore]标记,需要注意的是[NoField]是表字段会初始化,表单、列表字段信息不会初始化,[Ignore]字段是数据表字段、字段信息都不会初始化,[FieldConfig]则是两者都会初始化

目前支持的表单控件:

    /// <summary>
/// 表单控件类型
/// </summary>
public enum ControlTypeEnum
{
/// <summary>
/// 文本框
/// </summary>
[Description("文本框")]
TextBox = , /// <summary>
/// 单选CheckBox
/// </summary>
[Description("单选CheckBox")]
SingleCheckBox = , /// <summary>
/// 多选CheckBox
/// </summary>
[Description("多选CheckBox")]
MutiCheckBox = , /// <summary>
/// 下拉列表框
/// </summary>
[Description("下拉列表")]
ComboBox = , /// <summary>
/// 下拉弹出列表框
/// </summary>
[Description("下拉弹出列表")]
ComboGrid = , /// <summary>
/// 下拉树
/// </summary>
[Description("下拉树")]
ComboTree = , /// <summary>
/// 浮点数值输入框
/// </summary>
[Description("浮点数值")]
NumberBox = , /// <summary>
/// 整型数值输入框
/// </summary>
[Description("整型数值")]
IntegerBox = , /// <summary>
/// 弹出列表框
/// </summary>
[Description("弹出列表框")]
DialogGrid = , /// <summary>
/// 单选框组
/// </summary>
[Description("单选框组")]
RadioList = , /// <summary>
/// 日期输入框
/// </summary>
[Description("日期")]
DateBox = , /// <summary>
/// 日期时间
/// </summary>
[Description("日期时间")]
DateTimeBox = , /// <summary>
/// 文本域
/// </summary>
[Description("文本域")]
TextAreaBox = , /// <summary>
/// 富文本框
/// </summary>
[Description("富文本框")]
RichTextBox = , /// <summary>
/// 文本框List,暂不支持
/// </summary>
[Description("文本框List")]
TextBoxList = , /// <summary>
/// 密码输入框,暂不支持
/// </summary>
[Description("密码输入框")]
PasswordBox = , /// <summary>
/// 图标控件
/// </summary>
[Description("图标控件")]
IconBox = , /// <summary>
/// 弹出树控件
/// </summary>
[Description("弹出树控件")]
DialogTree = , /// <summary>
/// 文件上传,暂不支持
/// </summary>
[Description("文件上传")]
FileUpload = , /// <summary>
/// 图片上传控件
/// </summary>
[Description("图片上传")]
ImageUpload = , /// <summary>
/// 隐藏控件
/// </summary>
[Description("隐藏控件")]
HiddenBox = , /// <summary>
/// 显示标签
/// </summary>
[Description("显示标签")]
LabelBox = ,
}

控件类型在表单字段中也可以切换,不过对有些控件切换后前端处理可能会有些问题,一般对于同类型控件,如文本类控件相互切换没有问题

OK,今天的介绍就到此地,祝大家生活愉快!

Rookey.Frame之实体类的更多相关文章

  1. Rookey.Frame之实体FluentValidation验证

    昨天给大家介绍了Rookey.Frame框架的实体设计,今天继续跟大家分享实体的FluentValidation验证,在Rookey.Frame框架中可以设置多种验证方式:FluentValidati ...

  2. Rookey.Frame企业级极速开发框架

    项目详细介绍 Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性 ...

  3. Rookey.Frame v1.0快速开发平台-整体介绍

    Rookey.Frame v1.0是一套基于.NET MVC的极速开发框架,支持简单逻辑模块零代码编程.支持二次开发,具有高扩展性.高复用性.高伸缩性. 框架特点 (1)简单逻辑模块实现零代码编程,通 ...

  4. Rookey.Frame企业级快速开发框架开源了

    Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性:应广大网友要 ...

  5. Rookey.Frame之DAL工厂

    昨天给大家介绍了表单验证功能,今天给大家介绍下Rookey.Frame框架的数据层工厂,由于Rookey.Frame框架ORM是基于servicestack.ormlite,很多朋友反映这个网上中文资 ...

  6. Rookey.Frame之实体表单验证

    昨天给大家介绍了实体FluentValidation验证,今天继续给大家介绍表单验证,在Rookey.Frame框架中,表单验证有PrimaryKeyFields字段验证.唯一验证.必填验证.常用验证 ...

  7. Rookey.Frame之数据库及缓存配置

    上一篇中讨论了Rookey.Frame框架菜单配置功能,这一节我们继续学习Rookey.Frame框架的数据库连接配置. 之前介绍了Rookey.Frame框架支持跨多数据库,并且支持读写分离,不过目 ...

  8. Rookey.Frame之系统初始化

    昨天介绍了数据库的配置,今天继续介绍系统的初始化功能:针对系统初始化在开发中也是很重要的一部分,它可以提前将相关数据提前自动初始化到系统中,同时也可以为上线测试提供方便,可以很方便进行系统测试演练,防 ...

  9. Rookey.Frame v1.0快速开发平台-用户登录

    上一次介绍的了Rookey.Frame v1.0快速开发平台的整体功能,接下来会对各个功能点进行解析说明,今天给大家介绍下系统登录功能. 用户登录 系统中基本上所有功能页面都是从后台代码拼接后返回的, ...

随机推荐

  1. ubuntu16.04下caffe以cpu运行faster rcnn demo

    参考https://haoyu.love/blog404.html 获取并修改代码 首先,我们需要获取源代码: git clone --recursive https://github.com/rbg ...

  2. VS批处理命令使用

    在项目开始生成或者生成完成后想做一些操作,比如去编译非解决方案下的的项目,完成编译后复制文件到某个文件夹之类的纠结需求. 1. 基本使用 预先生成事件命令行,可以在项目编译的过程中运行 后期生成事件命 ...

  3. 转:UIView之userInteractionEnabled属性介绍

    属性作用 该属性值为布尔类型,如属性本身的名称所释,该属性决定UIView是否接受并响应用户的交互. 当值设置为NO后,UIView会忽略那些原本应该发生在其自身的诸如touch和keyboard等用 ...

  4. matlab中uigetfile命令的应用

    matlab中uigetfile命令的应用 uigetfile命令的应用 此函数的用法为 [FileName,PathName,FilterIndex] = uigetfile(FilterSpec, ...

  5. 用户管理_组管理_权限管理.ziw

    2017年1月10日, 星期二 用户管理_组管理_权限管理 用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage ...

  6. 你需要了解 Windows Phone 8.1 的11件事

    微软已经发布了其新一代手机操作系统 Windows Phone 8.1,拥有一些新的特性.从本质上来说,微软此次的大修让 Windows Phone 更接近 Android 和 iOS,对于使用体验的 ...

  7. BZOJ4819 新生舞会

    4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MB Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学 ...

  8. C语言编写守护进程

    概念 守护进程(daemon)是一种运行在后台的一种特殊的进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在Linux中,每个系统与用户进行交流的界面成为终端,每一个从此终 ...

  9. HDU 3790 最短路径问题 (最短路)

    题目链接 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. ...

  10. 使用win10 hyper-v安装linux系统

    1.控制面板---程序---启动或关闭windows功能---启动hyper-v管理器---重启 2.配置网络 因为公司内网通过ip验证,而通过桥接的方式,虚拟机就相当于物理机所在的网络中的一台真实主 ...