一个简单的MVC5+EF6小demo,演示mvc和ef的简单编写流程。
1. 创建项目
1、选择.Net Farmework版本为4.5以上的,这里我选择4.5.2 2、选择模板,选择Empty,勾选MVC引用:
可以看到VS自动帮我们添加了asp.net MVC默认约定的文件夹,按照asp.net MVC的约定大于配置的原则,不要随意改变文件夹的名字,也不要将文件随意添加,不然可能导致程序出错。
关于基本项目文件的说明:
App_Start
:一些全局的配置类,配合Global
使用。
Controllers
:存放MVC控制器的文件夹。
Models
:存放数据模型(class)文件夹。
Views
:存放视图的文件夹。
2. 添加EF组件
EntityFarmework是作为组件的形式存在的,要使用EntityFarmework需要添加它的引用。 1、使用Nuget添加EF:右击引用==>管理NuGet程序包,会弹出NuGet管理界面。 2、点击“浏览”按钮,可以看到“EntityFramework”作为常用组件会排列在第一位,选择后,点击右边的“安装”按钮即可进行安装。
3. 添加User数据模型,并且使用code first自动生成数据库
1、在“Models”文件夹中添加一个名为User
的类,并添加以下内容:
|
|
注:需要添加一个命名空间System.ComponentModel.DataAnnotations
,代码中的特性标签是作为数据注解使用的,关于数据注解,在下一篇中总结。
2、添加数据库上下文类:
在“Models”文件夹中添加一个名为DbEntities
的类作为数据库上下文类,该类需要继承DbContext
类。然后添加如下代码:
|
|
3、配置数据库连接字符串
打开“web.config”文件,添加数据库连接字符串,比如:
因为目前为止还没有创建数据库,所以这里指定数据库名称时,可以随意起一个不重复的名字即可,创建时,就会自动按照该名称创建数据库。
同时注意,连接字符串的name
属性的值和数据库上下文中base
的值要一致。
|
|
4、使用EF数据迁移创建数据库
依次点击:工具==>NuGet包管理器==>程序包管理控制台,打开power shell窗口。
输入:
Enable-Migrations
:表示开启该项目的数据迁移功能,只需运行依次,以后迁移数据时,不需要再运行该命令。
Add-Migration migrationName
:添加迁移命令,需要给本次迁移起一个名字(如migrationName),这时还没有开始迁移,只是打上了迁移的标记。
Update-Database
:将迁移更新到数据库中。
三条命令全部成功执行后,不出意外的话,数据库中应该已经创建了相应的数据库、表、字段:
同时,项目中也为我们自动添加了一个名为“Migrations”的文件夹,里面有两个文件,分别是数据迁移的配置类(Configuration)、数据迁移的内容(xxxxx_migrationName)。
4. 编写简单的登录页面
我们可以直接在数据库中添加一条用户登录的数据,Name=admin,Pwd=123456
1、添加控制器:
在“Controllers”文件夹右击,添加==>控制器,在弹出的窗口中选择“MVC5控制器 空”,然后起名为HomeController
。
2、添加首页视图:
可以看到,自动为我们生成了一个Index
方法,光标停在Index
上面,然后鼠标右击,在弹出的菜单中选择“添加视图”,然后在弹出窗口中不修改视图的名字(按照约定,视图的名字必须和控制器方法名一致),去除“使用布局页”前面的对勾(关于如何使用布局页将在另一篇博客中总结),点击添加。
3、在Index视图中添加表单:
VS帮我们生成了一个基础的Razor模板,我们在<body></body>
中添加表单内容:
关于@html辅助方法,在前面的博客中简单总结了一下。
在页面开头我们还需要引入在Razor中使用的数据模型的完全限定名,使用@model
引入,比如@model Mvc5_EF6_Demo.Models.User
|
|
4、添加登录事件处理方法:
在HomeController
控制器中创建一个名为Index
的方法,因为表单的发送地址执行了Index方法,但是现在又两个Index方法,这是程序不允许的,需要进行处理。
由于表单是post请求发送的,在接收表单的Index方法上面写上一个特性标签[HttpPost]
,表示该方法只响应post请求,然后接收参数为User
类型的一个参数,代码如下:
|
|
5、添加登录成功视图:
在HomeController
控制器中增加一个LoginOk
方法并且添加视图,用来展示登录成功页面
5. 测试
启动项目,测试:
1、我们少填一个字段:
可以看到,不填写的话,就会显示相应的提示,因为我们在数据模型中添加了[Required]
特性标签,就是必填的意思,然后在提交到Action中时,使用ModelState.IsValid
进行判断。
2、验证成功:
3、验证失败:
暂时没有验证,所以会跳转到Index页面。