目录

为什么使用WTM

创建工程

创建第一个 Model

生成ViewModel


为什么使用WTM

WTM即WalkingTec.Mvvm,是一个基于.Asp.net Core 和Entity Framework Core的快速开发框架,可以快速上手搭建项目,将重复性的工作交给框架,开发者可以更加专注于业务逻辑。

对于我个人而言,使用快速开发框架,不仅是能够提高开发效率,更是在工作中不断加大的开发需求量以及网络安全压力下,使用框架开发,来取代之前使用Asp.net Framework纯手工搭建Web,显得尤为重要。WTM框架提供了丰富的后台数据管理功能,包括权限控制、日志记录等系统性功能,使我们的系统更加安全稳定。以近期的开发任务“故障统计”为例,记录学习。

创建工程

  • 进入WTM官网:https://wtmdoc.walkingtec.cn/

  • 点击官网右上角的“这里”

  • 输入项目名称

  • 配置WTM框架的设置

  • 点击开始配置,下载Visual Studio项目工程

创建第一个 Model

  • 打开工程,在TxdFaultStatistics.Model下创建类:Workship,创建“部门”表
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WalkingTec.Mvvm.Core;namespace TxdFaultStatistics.Model
{[Table("workship")]      //实体数据库表名public class Workship:BasePoco,ITreeData<Workship>{[Display(Name="部门(车间)名称")]        //前端显示的字段名[Required(ErrorMessage ="部门(车间)名称是必填项")]public string Name { get; set; }public List<Workship> Children { get; set; }public Workship Parent { get; set; }public Guid? ParentId { get; set; }}
}

继承框架的BassPoco类,会继承BassPoco类中的几个字段,以及父类TopBasePoco。

  • 创建第二个Model,Group类,并且与Workship建立外键级联
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WalkingTec.Mvvm.Core;namespace TxdFaultStatistics.Model
{[Table("group")]public class Group:BasePoco{[Display(Name = "班组名称")][Required(ErrorMessage = "班组名称是必填项")]public string Name { get; set; }public Workship Workship { get; set; }[Display(Name = "所属部门")][Required(ErrorMessage = "所属部门是必填项")]public Guid? WorkshipId { get; set; }}
}
  • 创建第三个Model,RailwayLine类,记录线路的名称
using Microsoft.AspNetCore.Cors;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WalkingTec.Mvvm.Core;namespace TxdFailureStatistics.Model
{[Table("railway_line")]public class RailwayLine:BasePoco, ITreeData<RailwayLine>{[Display(Name ="线路名称")][Required(ErrorMessage ="线路名称是必填项")]public string Name { get; set; }public List<RailwayLine> Children { get; set; }[Display(Name ="父级")]public RailwayLine Parent { get; set; }[Display(Name = "父级")]public Guid? ParentId { get; set; }}
}
  • 创建第四个Model,OpticalCable类,记录光缆名称,并与RailwayLine外键级联。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WalkingTec.Mvvm.Core;namespace TxdFailureStatistics.Model
{[Table("optical_cable")]public class OpticalCable:BasePoco{[Display(Name = "光(电)缆名称")][Required(ErrorMessage = "光(电)缆名称是必填项")]public string Name { get; set; }public RailwayLine RailwayLine { get; set; }[Display(Name = "所属线路名称")][Required(ErrorMessage = "所属线路名称是必填项")]public Guid? RailwayLineId { get; set; }}
}
  • 创建第五个Model,OpticalCableFailure类,记录线路故障
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WalkingTec.Mvvm.Core;namespace TxdFaultStatistics.Model
{public enum RialwayLineTypeEnum{普速, 高铁}public enum ManageAttributesEnum{有线, 无线}public enum OpticalCableLevelEnum{地区, 干线}public enum DiscontinuityTypeEnum{自然灾害, 施工, 尾纤故障, 缆身故障, 绝缘不良}public enum InformationSourcesEnum{用户申告, 上级部门通知, 网管通知, 车间通知}[Table("optical_cable_failure")]public class OpticalCableFailure : BasePoco {[Display(Name = "发生时间")][Required(ErrorMessage = "时间是必填项")]public DateTime? Time { get; set; }[Display(Name ="车间")]public Workship Workship { get; set; }[Display(Name = "车间")][Required(ErrorMessage ="所属车间是必填项")]public Guid WorkshipId { get; set;  }[Display(Name ="所属工区")]public Group Group { get; set; }[Display(Name = "所属工区")][Required(ErrorMessage ="所属工区是必填项")]public Guid GroupId { get; set; }[Display(Name = "线路属性")][Required(ErrorMessage = "线路属性为必填项")]public RialwayLineTypeEnum? RailwayLineType { get; set; }[Display(Name = "管理属性")][Required(ErrorMessage = "管理属性为必填项")]public ManageAttributesEnum? ManageAttributes { get; set; }[Display(Name ="线路名称")]public RailwayLine RailwayLine { get; set; }[Display(Name ="线路名称")][Required(ErrorMessage ="线路名称是必填项")]public Guid RailwayLineId { get; set; }[Display(Name = "光(电)缆名称")]public OpticalCable OpticalCable { get; set; }[Display(Name = "光(电)缆名称")][Required(ErrorMessage = "光(电)缆名称是必填项")]public Guid OpticalCableId { get; set; }[Display(Name ="光(电)缆等级")][Required(ErrorMessage = "光(电)缆等级为必填项")]public OpticalCableLevelEnum? OpticalCableLevel { get; set; }[Display(Name = "机房名称")][Required(ErrorMessage = "机房名称为必填项")]public string HouseName { get; set; }[Display(Name = "光(电)缆中断区域")][Required(ErrorMessage = "光(电)缆中断区域为必填项")]public string OpticalCableDiscontinuityArea { get; set; }[Display(Name = "测试站")][Required(ErrorMessage = "测试站为必填项")]public string TestStation { get; set; }[Display(Name = "断点距测试站距离(KM)")][Required(ErrorMessage = "断点距测试站距离为必填项")]public string DiscontinuityToStationDistance { get; set; }[Display(Name = "断点对应公里标(K***+***)")][Required(ErrorMessage = "断点对应公里标为必填项")]public string DiscontinuityCorrespondRailwayKilometerMark { get; set; }[Display(Name = "中断分类")][Required(ErrorMessage = "中断分类为必填项")]public DiscontinuityTypeEnum? DiscontinuityType { get; set; }[Display(Name ="原因描述")][Required(ErrorMessage = "原因描述为必填项")]public string ReasonDescription { get; set; }[Display(Name ="处理结果")][Required(ErrorMessage = "处理结果为必填项")]public string ProcessResult { get; set; }[Display(Name = "信息来源")][Required(ErrorMessage = "信息来源为必填项")]public InformationSourcesEnum? InformationSources { get; set; }[Display(Name = "发生时间")][Required(ErrorMessage ="发生时间是必填项")]public DateTime? BeginTime { get; set; }[Display(Name ="恢复时间")][Required(ErrorMessage = "恢复时间是必填项")]public DateTime? EndTime { get; set; }[Display(Name ="备注")]public string Remark { get; set; }}
}
  • 在TxdFaultStatistics.DataAccess下的DataContext下添加生成数据库表的代码
public DbSet<RailwayLine> RailwayLines { get; set; }
public DbSet<OpticalCable> OpticalCables { get; set; }
public DbSet<Workship> Workships { get; set; }
public DbSet<Group> Groups { get; set; }
public DbSet<OpticalCableFailure> OpticalCableFailures { get; set; }

生成ViewModel

  • 运行工程
  • 进入程序,点击代码生成器

  • 选择模型,输入区域(可选),输入模块名称,选择认证方式为Cookie,生成相应的ViewModel

  • 重启程序,运行

WTM快速开发框架学习(一)第一个工程相关推荐

  1. 强烈推荐一个超棒的可学习更可商用的快速开发框架——WTM快速开发框架(开源)

    童鞋们啊,作为一个快毕业的专业与信息技术相关的二流大学僧,平常上课如听书,下课打地鼠,浑浑噩噩等到毕设来临,才知道自己是半桶水晃荡,一个完整地项目都运行不起来- 别嘲笑我啊,我打赌起码有一半的大学生都 ...

  2. Qt学习-创建第一个工程

    目录 一些杂碎相关知识 基本框架 如何创建项目 1.创建一个Applicant 2.选择路径 3.选择编译器 一些杂碎相关知识 面向对象(c++)------->不用关注细节,会用就行. 可以开 ...

  3. 如何快速学习STAR-CCM+软件解决工程实际问题

    附赠仿真学习包,包含结构.流体.电磁.热仿真等多学科视频教程,点击领取: ​​​​​​仿真秀粉丝专属礼包 作者:Tsinglin,仿真秀专栏作者 随着CFD技术的发展,CFD已成为现在工程应用中用于解 ...

  4. 2.3 快速搭建你的第一个系统,并进行迭代-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.2 清除标注错误的数据 回到目录 2.4 在不同的划分上进行训练并测试 快速搭建你的第一个系统,并进行迭代 (Build Your First System Quickl ...

  5. 2018第一作,JFDF快速开发框架的横空出世

    前言 写在前面的话,致每一位读者! 任何事物的诞生总有她的必然性和偶然性,就如牛顿当年坐在树下被水果砸中头后发明了万有引力,是坐下树下的偶然,也是历史推动的必然. JFDF也不例外,作为一个游走在职场 ...

  6. android的快速开发框架集合

    android的快速开发框架集合 出自:http://blog.csdn.net/shulianghan/article/details/18046021 1.Afinal  (快速开发框架) 简介: ...

  7. Django 开发框架学习(一)

    Django 开发框架学习 Django流程 重点 Django介绍 1. 简介 2. 特点 1) 重量级框架 2)MVT模式 MVC模式说明 Django的MVT 3. Django学习资料 为什么 ...

  8. HarmonyOS(一) 快速开始学习鸿蒙开发,官方文档学习路线解析

    系列文章目录 HarmonyOS(一):快速开始学习鸿蒙开发,官方文档学习路线解析 HarmonyOS(二):应用开发环境搭建准备 HarmonyOS(三):创建你的第一个HelloWorld应用 文 ...

  9. (转)利用快速开发框架,快速搭建微信浏览博客园首页文章

    原文地址:http://www.cnblogs.com/inday/p/weixin-publicf-platform-cnblogs.html 这几天接连发布了<快速开发微信公众平台框架--- ...

最新文章

  1. 201621123030《Java程序设计》第4周学习总结
  2. Matlab大气湍流退化模型
  3. (pytorch-深度学习系列)pytorch卷积层与池化层输出的尺寸的计算公式详解
  4. 5分钟 NLP系列—— 11 个词嵌入模型总结
  5. 训练作用_我们口才训练微信群有哪些重要作用?
  6. 我错了,有个叫 SelectSingleNode 的可以操作 xml
  7. CVPR 2021 | 港科大:如何利用闪光图像(flash image)来去除反光
  8. thinkphp5每周学习总结1019
  9. python 追加到字典_使用Python读取,写入和解析JSON
  10. 整理总结一下:git恢复本地误删除的分支
  11. 数据分析之如何制作数据埋点文档
  12. 递归,复制对象,找质数,判断数组
  13. linux SO文件
  14. mysql有闪回吗_【赵强老师】MySQL的闪回
  15. IO第二天 低级流 缓冲流BOS 对象流OOS
  16. 工程实践中的体系与系统
  17. SpringCLoud+redis+es高并发项目《九》(Spring Security Oauth2 JWT)
  18. ERC20接口下USDT代币的深入解析
  19. 基于opencv的SVM车牌号码识别模型训练(C++)QT
  20. 使用BackTrack来增强电脑的安全

热门文章

  1. Java中的运算符——赋值运算符详解
  2. 如何重置计算机服务到默认状态,如何重置Windows10到出厂默认设置
  3. 国内现有主要量化交易策略
  4. 16TB布局谋发展,东芝企业级硬盘这次抢了个
  5. 微信活动——微信房产经纪公司评比活动
  6. 春运一票难求,你知道12306是什么语言编写开发的吗?
  7. 【2017】Large-Scale YouTube-8M Video Understanding with Deep Neural Networks借助深度神经网络对YT8M进行大规模视频理解
  8. 接口测试-header
  9. Backtrace 分析
  10. 通往“第三极”:从AppGallery,解析华为移动开发生态的差异化跳板