上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里讲的主要是通过Codefirst方式实现的。

一、M层简单介绍
1、M层很形象的将数据库里面的各个表格映射成了C#当中的类,比如上篇文章创建的用户表:
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE [dbo].[SYS_USER](
         [ID] [nvarchar](36) NOT NULL,--ID
         [USERNAME] [nvarchar](20) NULL,--用户名
         [REALNAME] [nvarchar](30) NULL,--真实姓名
         [USERPASS] [nvarchar](32) NULL,--用户密码
         [RULEID] [nvarchar](36) NULL,--角色ID
         [RULENAME] [nvarchar](60) NULL,--角色名称
 CONSTRAINT [PK_SYS_USER] PRIMARY KEY CLUSTERED
(
         [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

映射成Model类为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public partial class SYS_USER
{
    public string ID { get; set; }
    [Required(ErrorMessage = "{0}不能为空")]
    [DisplayName("用户名")]
    public string USERNAME { get; set; }
    [Required(ErrorMessage = "{0}不能为空")]
    [DisplayName("真实姓名")]
    public string REALNAME { get; set; }
    [Required(ErrorMessage = "{0}不能为空")]
    [DisplayName("用户密码")]
    public string USERPASS { get; set; }
    [Required(ErrorMessage = "{0}不能为空")]
    [DisplayName("所属角色")]
    public string RULEID { get; set; }
    [DisplayName("所属角色")]
    public string RULENAME { get; set; }
}

类名跟表明对应,属性名跟字段名对应。到这一般实际中表跟类是没有关系的,还需进一步配置。

2、通过EntityTypeConfiguration将类跟数据库里面的表依依做对应

通过EntityTypeConfiguration可以设置类跟数据库里面哪个表做对应,本步好像可以不做也行,默认有对应关系,默认对应关系中数据库表后面好像得有个s,具体对应代码如下:

1
2
3
4
5
6
7
public class SYS_USERMapping : EntityTypeConfiguration<SYS_USER>
{
    public SYS_USERMapping()
    {
        ToTable("dbo.SYS_USER");
    }
}

不难看出ToTable("dbo.SYS_USER")这里指定了对应数据库里面的哪个表格。

3、使用DbContext做统筹

以上两步介绍的必须DbContext做个关联才行,codefirst中所有对数据库表的增删改查都必须通过DbContext提供的方法去做。具体代码如下:

1
2
3
4
5
6
7
8
9
public class SiteDataBaseDbContent : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new SYS_USERMapping());
        base.OnModelCreating(modelBuilder);
    }
    public DbSet<SYS_USER> SYS_USER { get; set; }
}
1
modelBuilder.Configurations.Add(new SYS_USERMapping());跟第二条对应。
4、至此还缺一个数据库链接,有了数据库链接M层就做完了,貌似很简单。

数据库链接在web.config中实现就可以了,链接名称跟public class SiteDataBaseDbContent : DbContext这里的SiteDataBaseDbContent 名称一致就行,名称一致了codefirst会自己去找这个链接,代码如下:

1
2
3
<connectionStrings>
      <add name="SiteDataBaseDbContent" connectionString="Data Source=.;Initial Catalog=SiteDataBase;Persist Security Info=True;User ID=sa;Password=t145879" providerName="System.Data.SqlClient" />
 </connectionStrings>

M层的相关知识简单的就这些了,能满足一般项目需求。

二、本项目M层具体建立操作步骤

M层的主要工作量就在于写数据表对应类,有简单的方法不用自己去写,步骤如下:

在解决方案资源管理器的Models文件夹右键点击,选择添加-》新建项菜单,如下图:

打开新建对话框,左侧选择数据菜单,右侧选择ADO.NET实体数据模型,然后点击添加按钮,如下图:

然后选择从数据库生成,然后点击下一步,如下图:

然后点击新建链接按钮,根据你数据库配置情况建立数据库链接,如下图:

数据库链接创建成功后点击下一步按钮,然后选择全部表格,如下图:

最后点击完成按钮即可,此时所有表对应的类都已经生成,如下图:

说明:这里的Model1.edmx只是临时使用文件,M层创建完后删除就行。

1、创建项目的CodeFirst Model类

在解决方案资源管理器的Models文件夹右键点击,选择添加-》类菜单,如下图:

创建一个名为DatabaseModels的类文件。然后将Model1.tt下面的类都考入DatabaseModels文件中,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace SiteDataBase.Models
{
    public partial class SYS_USER
    {
        public string ID { get; set; }
        public string USERNAME { get; set; }
        public string REALNAME { get; set; }
        public string USERPASS { get; set; }
        public string RULEID { get; set; }
        public string RULENAME { get; set; }
    }
    public partial class SYS_ROLE
    {
        public string ID { get; set; }
        public string NAME { get; set; }
        public string ROLEDESC { get; set; }
        public string SHOWORDER { get; set; }
        public string LOCKSTATE { get; set; }
        public string POWERLIST { get; set; }
        public Nullable<System.DateTime> CREATETIME { get; set; }
        public string CREATEIP { get; set; }
        public string CREATEUSER { get; set; }
        public Nullable<System.DateTime> MODIFYTIME { get; set; }
        public string MODIFYIP { get; set; }
        public string MODIFYUSER { get; set; }
    }
}
2、创建数据库表跟类对应关系代码EntityAnnotations.cs

上面代码只是列举了两个,将其他代码也必须考入DatabaseModels文件中,第二步是根据类创建数据库表跟类的对应关系类:EntityAnnotations.cs,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace SiteDataBase.Models
{
    public class SYS_ROLEMapping : EntityTypeConfiguration<SYS_ROLE>
    {
        public SYS_ROLEMapping()
        {
            ToTable("dbo.SYS_ROLE");
        }
    }
    public class SYS_USERMapping : EntityTypeConfiguration<SYS_USER>
    {
        public SYS_USERMapping()
        {
            ToTable("dbo.SYS_USER");
        }
    }
}

同理所有表格都必须做对应。

3、创建项目的DbContext文件,最终代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class SiteDataBaseDbContent : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new SITE_ARTICLEMapping());
            modelBuilder.Configurations.Add(new SITE_COLUMNMapping());
            modelBuilder.Configurations.Add(new SITE_PROJECTMapping());
            modelBuilder.Configurations.Add(new SYS_DICTIONARYMapping());
            modelBuilder.Configurations.Add(new SYS_INFOMATIONMapping());
            modelBuilder.Configurations.Add(new SYS_LOGMapping());
            modelBuilder.Configurations.Add(new SYS_MENUMapping());
            modelBuilder.Configurations.Add(new SYS_ROLEMapping());
            modelBuilder.Configurations.Add(new SYS_USERMapping());
            modelBuilder.Configurations.Add(new FRIENDLY_LINKMapping());
            base.OnModelCreating(modelBuilder);
        }
        public DbSet<FRIENDLY_LINK> FRIENDLY_LINK { get; set; }
        public DbSet<SITE_ARTICLE> SITE_ARTICLE { get; set; }
        public DbSet<SITE_COLUMN> SITE_COLUMN { get; set; }
        public DbSet<SITE_PROJECT> SITE_PROJECT { get; set; }
        public DbSet<SYS_DICTIONARY> SYS_DICTIONARY { get; set; }
        public DbSet<SYS_INFOMATION> SYS_INFOMATION { get; set; }
        public DbSet<SYS_LOG> SYS_LOG { get; set; }
        public DbSet<SYS_MENU> SYS_MENU { get; set; }
        public DbSet<SYS_ROLE> SYS_ROLE { get; set; }
        public DbSet<SYS_USER> SYS_USER { get; set; }
    }
4、创建数据库链接,代码如下:
1
2
3
4
<connectionStrings>
  <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-SiteDataBase-20170902172943;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-SiteDataBase-20170902172943.mdf" />
  <add name="SiteDataBaseDbContent" connectionString="Data Source=.;Initial Catalog=SiteDataBase;Persist Security Info=True;User ID=sa;Password=t145879" providerName="System.Data.SqlClient" />
</connectionStrings>
5、删除刚才新建的Model1.edmx文件,最终Models目录如下:

至此项目的M层创建完成,还需要进一步进行修改,具体修改知识介绍如下:

三、Model验证知识讲解

.net mvc中前端输入label提示及输入验证都是在M层实现的。

1、label输入提示

[DisplayName("新闻标题")]
public string TITLE { get; set; }

2、输入验证

Model类中可以添加的验证标记:

1. 必填字段

[Required(ErrorMessage = "{0}不能为空")]

public string FirstName { get; set; }

2. 字段长度

至多n位:

[StringLength(160)]

public string FirstName { get; set; }

要求至少n位:

[StringLength(160, MinimumLength=3)]

public string FirstName { get; set; }

3. 正则验证

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]

public string Email { get; set; }

4. 范围

[Range(35,44)]

public int Age { get; set; }

小数的情况:

[Range(typeof(decimal), “0.00”, “49.99”)]

public decimal Price { get; set; }

5. 服务端参与的验证

[Remote(“CheckUserName”, “Account”)]

public string UserName { get; set; }

然后在AccountController里指定一个CheckUserName方法:

1
2
3
4
5
public JsonResult CheckUserName(string username)
{
    var result = Membership.FindUsersByName(username).Count == 0;
    return Json(result, JsonRequestBehavior.AllowGet);
}

6. 比较

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]

public string Email { get; set; }

[Compare(“Email”)]

public string EmailConfirm { get; set; }

7. 自定义错误消息

正则:

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”,
ErrorMessage=”Email doesn’t look like a valid email address.”)]

public string Email { get; set; }

普通文本:

[Required(ErrorMessage=”Your last name is required”)]

[StringLength(160, ErrorMessage=”Your last name is too long”)]

public string LastName { get; set; }

占位符:

[Required(ErrorMessage=”Your {0} is required.”)]

[StringLength(160, ErrorMessage=”{0} is too long.”)]

public string LastName { get; set; }

3、常用正则表达式整理

数字:"^[0-9]*$"。

n位的数字:"^\d{n}$"。

至少n位的数字:"^\d{n,}$"。

m~n位的数字:。"^\d{m,n}$"

零和非零开头的数字:"^(0|[1-9][0-9]*)$"。

有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。

有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。

非零的正整数:"^\+?[1-9][0-9]*$"。

非零的负整数:"^\-[1-9][]0-9"*$。

长度为3的字符:"^.{3}$"。

由26个英文字母组成的字符串:"^[A-Za-z]+$"。

由26个大写英文字母组成的字符串:"^[A-Z]+$"。

由26个小写英文字母组成的字符串:"^[a-z]+$"。

由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。

由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。

验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。

验证是否含有^%&’,;=?$\"等字符:"[^%&’,;=?$\x22]+"。

只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"

验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。

验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。

验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。

验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。

至此本文完毕

点击下载Model层代码

技术交流QQ:806693619

asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立的更多相关文章

  1. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建

    上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...

  2. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作

    /****** Object: 新闻表 Script Date: 2017/9/2 星期六 15:11:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENT ...

  3. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发

    进行本文之前需要在数据库用户表里面增加一条用户数据,直接手动添加即可,未安全考虑密码一定要使用Md5加密后的,这里提供666666的Md5密文为(c831b04de153469d),本文完成登录模块的 ...

  4. [转]开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo

    热衷于开源框架探索的我发现ASP.NET MVC与jQuery easyUI的组合很给力.由于原先一直受Ext JS框架的licence所苦恼,于是痛下决心寻找一个完全免费的js框架——easyUI. ...

  5. 开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo(转)

    热衷于开源框架探索的我发现ASP.NET MVC与jQuery easyUI的组合很给力.由于原先一直受Ext JS框架的licence所苦恼,于是痛下决心寻找一个完全免费的js框架——easyUI. ...

  6. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(1)

    文章转自:http://www.xuboyi.com/298.html 前言 网站运营有一段时间了,记录的内容都是杂七杂八的,思前想后,决定给大家分享一套ASP.Net的系列教程.手把手的做一套通用后 ...

  7. ASP.NET MVC5 + EF6 + LayUI实战教程,通用后台管理系统框架(3)

    前言 本节将我们自己的CSS样式替换系统自带的 开始搭建 将脚本文件夹删掉,将内容文件夹里的内容删掉,将我们自己的CSS样式文件,全部复制到内容里边 新建家庭控制器 给家庭控制器添加索引视图 指数代码 ...

  8. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(2)

    前言 本节先给大家搭建UI部分,让大家能看到点东西,就好像所有编程书里,开始都是一个Hello World一样 开始搭建 首先建立空白解决方案,我们命名为BYCMS 然后添加新项目BYCMS 我习惯用 ...

  9. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(7)- EF增删改查

    前言 上一节创建了实体数据库,这次我们来看看怎么操作这个实体 代码实现 新建一个UserInfoController的控制器:不需要写什么代码,系统自动生成Index方法: 创建IDAL,DAL,IB ...

随机推荐

  1. [Android]使用化名(alias)功能防止相同资源的重复

    在为一个应用匹配不同资源文件的时候,有时可能需要在不同适配类型的资源路径下使用相同的资源文件,这时使用alias方法可以防止相同资源文件的重复,提高效率.以下摘自Android开发文档http://d ...

  2. CSS拾遗(二)

    接CSS拾遗(一). 4. 不透明度 opacity: 0.8; filter: alpha(opacity=80); opacity: 0.8是标准的写法:filter: alpha(opacity ...

  3. C#依赖注入控制反转IOC实现详解

    原文:C#依赖注入控制反转IOC实现详解 IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起. ...

  4. Arcgis api for javascript学习笔记(3.2X版本)-Map图层叠加以及基本操作

    1. 不设置默认底图,第一个图层作为底图,然后叠加另外一个图层 先添加图层1,第一个图层1作为默认底图,然后在图层1上叠加图层2,并设置图层2的透明度为50%. <!DOCTYPE html&g ...

  5. 矿Java开发学习之旅------&gt;Java排序算法经典的二分法插入排序

    一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为採用折半比較,就可以得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比較 ...

  6. Delphi 的内存操作函数(1): 给字符指针分配内存( 给字符指针(PChar、PWideChar、PAnsiChar)分配内存最佳的选择是StrAlloc。分配内存的时候会对字符串进行初始化)

    马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr ...

  7. EF codefirst第一篇

    一直以来喜欢dbfirst  因为简单,一直不明白为什么codefirst会是主流,根据对ddd的学习终于知道了codefirst的目的 本文是对博客园 小崔的笔记本 文章 EF实体框架之CodeFi ...

  8. WPF 3D model - Sphere, Cone, and Cylinder

    原文:WPF 3D model - Sphere, Cone, and Cylinder   Extending Visual3D - Sphere, Cone, and Cylinder http: ...

  9. python两个整数和浮点的方法来获取值

    /*********************************************************************  * Author  : Samson  * Date   ...

  10. c#扩展方法简单

    扩展方法 怎样知道的. 这还得从项目的本身说起.该项目是一套的微软底层架构上搭建起来的. 全部的框架以及控件的封装,数据的传递方法都是总体的框架封装好的. 对经常使用的dropwodnlist控件的数 ...