MVC 捋一遍(1)
Model 封装业务逻辑相关的数据及对数据的处理方法
View 向用户提供交互界面
Controller 负责控制Model和View
但是在做的时候会发现还会出现DAL
DAL 放置数据访问相关类。
在DAL中
AccountContext为每个entity set创建一个DbSet
在EF中,通常情况下一个entity set对应数据库中的一张表,一个entity对应表中的一行。
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();这个的意思是:指定单数形式的表名
(DAL中)新建类AccountInitializer.cs
Seed方法用我们之前定义的database(数据库) context(即AccountContext) 作为参数,
通过这个context将entities添加到database(数据库)中去。(就是我们前面说的桥梁作用)
修改web.config, 通知EF使用我们刚刚写好的initializer类。
<entityFramework>
<contexts>
<context type="MVCDemo.DAL.AccountContext,MVCDemo" disableDatabaseInitialization="false">
<databaseInitializer type="MVCDemo.DAL.AccountInitializer,MVCDemo"></databaseInitializer>
</context>
</contexts>
</entityFramework>
在View和Controller中传递数据的一种方式 (类似的方式还有ViewData、TempData), 掌握通过ViewBag在View和Controller中传递数据
ViewBag可读性更好、在ViewPage中查询数据时不需要类型转换 ViewData在ViewPage中查询数据时需要转换合适的类型
ViewBag直接调用属性赋值
推荐一个好的例子:http://blog.csdn.net/fanbin168/article/details/44803437
[HttpPost]
public ActionResult Login(FormCollection fc)
填写表单 ->Controller获取表单数据 ->进一步操作(例如去数据库比对,通过后获取用户身份跳转到指定页面)
string email = fc["inputEmail3"]; //前台(HTML)email(input)的name属性 服务器端需要通过name来取值。
string password = fc["inputPassword3"];
通过下面的操作查询数据库进行比对 判断数据库中是否存在前台输入的数据
private AccountContext db = new AccountContext();
var user = db.SysUsers.Where(b => b.Email == email & b.Password == password); //b为SysUser类型
if (user.Count() > 0)
{ ViewBag.LoginState = email + "登录后。。。"; }
else
{ ViewBag.LoginState = email + "用户不存在。。。"; }
HtmlHelper
通过View的Html属性调用,文中以Html.BeginForm为例
@*<form action="/account/login" method="post" class="form-horizontal" role="form">*@//post为写操作 get为读操作
@using (Html.BeginForm("login", "Account", FormMethod.Post))使用HtmlHelper动态计算路由地址。
微软官方推出的ORM框架主要有Linq to SQL和Entity Framework.
使用ORM之后,以前面的SysUser为例:
O(Object) -> 程序中的类 SysUser, 就是对象
R (Relation)->数据库中的表
M(Mapping)-> O和R的映射关系
ORM对传统方式的改进:
充当桥梁,实现了关系数据和对象数据的映射,通过映射自动产生SQL语句。
对常用的操作,节省了写SQL语句的步骤。
安装EF
打开 工具->库程序包管理器->程序包管理器控制台
输入 install-package entityframework
创建类 AccountContext.cs , 让他继承自System.Data.Entity.DbContext, 我们用这个类完成EF的功能。(在DAL中)
最重要的是通过ef生成数据库