Asp.net-知识总结(6)
来源:互联网 发布:office文档修复软件 编辑:程序博客网 时间:2024/05/19 04:06
1.回顾:上篇学习了 Session 会话
2.EntityFramework(EF——实体对象*)
(1) 介绍
实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。是微软的一个ORM框架。
(2) IQueryable接口与IEnumberable区别
IQueryable接口与IEnumberable接口的区别: IEnumerable<T> 泛型类在调用自己的SKip 和Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令。也是延迟在我要真正显示数据的时候才执行。
演示linqto ef中使用Ienumberable与Iqueryable的区别,要用到的SQL Server Profiler工具
3.Linq表达式和 EF+MVC框架+Lambda
(1) Linq
简单查询:
var result = from c in Entities.Customer select c;
条件查询:
普通linq写法: var result =from c in Entities.Customer where c.Gender ==‘w’ select c;
Lambda表达式写法: var result = from c in Entities.Customer.Where<Customer>(c=>c.Gender==‘w’);
排序分页写法: IQueryable<Customers> cust10 = (from c in customers
orderby c.CustomerID
select c).Skip(0).Take(10);
普通linq写法: var result =from c in Entities.Customer where c.Gender ==‘w’ select c; Lambda表达式写法: var result = from c in Entities.Customer.Where<Customer>(c=>c.Gender==‘w’); 排序分页写法: IQueryable<Customers> cust10 = (from c in customers orderby c.CustomerID select c).Skip(0).Take(10);
左外连接:可以的连接有Join 和 GroupJoin 方法。GroupJoin组联接等效于左外部联接,它返回第一个(左侧)数据源的每个元素(即使其他数据源中没有关联元素)。
var query = from d in edm.Order_Details join order in edm.Orders on d.OrderID equals order.OrderID select new { OrderId = order.OrderID, ProductId = d.ProductID, UnitPrice = d.UnitPrice };
常用:
排序分页:
IQueryable<Customers> cust10 = (from cin customers orderby c.CustomerID select c).Skip(0).Take(10);
聚合
可使用的聚合运算符有Average、Count、Max、Min 和 Sum。
using (var edm = new NorthwindEntities()) { var maxuprice = edm.Products.Max(p=> p.UnitPrice); Console.WriteLine(maxuprice.Value); }
连接
可以的连接有Join 和 GroupJoin 方法。GroupJoin组联接等效于左外部联接,它返回第一个(左侧)数据源的每个元素(即使其他数据源中没有关联元素)。
using (var edm = new NorthwindEntities()) { var query = from d inedm.Order_Details join order in edm.Orders on d.OrderID equals order.OrderID select new { OrderId = order.OrderID, ProductId = d.ProductID, UnitPrice = d.UnitPrice }; foreach (var q in query) Console.WriteLine("{0},{1},{2}",q.OrderId,q.ProductId,q.UnitPrice);}
(2)Lambda表达式
l “Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。
l Lambda 表达式的运算符=>,该运算符读为“goes to”。
l => 运算符具有与赋值运算符 (=) 相同的优先级
l Lambda的基本形式:(input parameters) => expression
l 只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。 两个或更多输入参数由括在括号中的逗号分隔: (x, y) => x == y
l 有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型: (int x, string s) => s.Length> x
l 使用空括号指定零个输入参数: () => SomeMethod()
l 最常用的场景:Ienumable和Iqueryable接口的Where<>(c=>c.Id>3)
l 阅读:http://developer.51cto.com/art/200908/147091.htm
(3)EF的延迟加载
延迟加载:又称作懒加载。也就是Linq To EF并不是直接将数据查询出来,而是要用到具体数据的时候才会加载到内存
Include是将关联实体一块加载
ToList等可以直接将数据加载到内存
使用机制的选择
4. asp.net MVC (mvc框架*)
(1) 简介
1)MVC目的不是取代WebFrom开发,只是web开发的另外一种选择
2)Asp.Net MVC 模式是一种表现模式。它将web应用程序分成三个主要组件即:
Model、View、Controller
3)M:Model 主要是存储或者是处理数据的组件
Model其实是实现业务逻辑层对实体类相应 数据库操作,如:CRUD(C:Create/R:Read/U:Update/D:Delete)。它包括数据、验证规则、数据访问和业务逻辑等应用程序信息。
4) V:View 是用户接口层组件。主要是将Model中的数据展示给用户
5) C: Controller 处理用户交互,从model中获取数据并将数据传给指定的view
(2) MVC请求模型
(3) 优点
1、很容易将复杂的应用分成M、V、C三个组件模型
通过model、view和controller有效的简化了复杂的架构,体现了很好的隔离原则
2、因为没有使用server-based forms 。所以我们程序员控 制的更加灵活,页面加干净
3、可以控制生成自定义的url。对于seo友好的url更是不在话下
4、强类型View实现,更安全、更可靠、更高效。
5、让web开发可以专注于某一层。更利于分工配合适用于大型架构开发
6、很多企业已经使用MVC作为项目开发框架,招聘明确要求熟悉MVC开发模式(mvc+ef+wcf+…)。
(4)约定大于配置
Controller放到controllers文件夹中,并且命名方式以XxController结尾
每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同
Controller中的方法名都对应一个View(非必须,但是建议这么做)而且View的名字跟Action的名字相同
(4) 创建流程
新建Controller
创建Action
根据Action创建View
在Action获取数据并生产ActionResult传递给View。
View是显示数据的模板
url请求→Controller.Action处理→View响应
(5) 传递值得载体ViewData
(6) Model
l 包括数据、验证规则、数据访问和业务逻辑等应用程序信息它是我们Web应用的主框架
l Model调用的是我们的业务逻辑层
l Model作为ViewModel使用的情况
l 再次强调:Model是独立的组件,它并不知道View的存在,更不知道Controller的存在。这两个分离的理解很重要!
l Model包括数据,对数据的操作
l 与Model相关的设计方式
企业级项目的架构方式实例(演示)
l Model的扩展:
DomainModel、ViewModel的理解
(7) View
1)注意:view是负责输出显示数据,而非样式
2)View中的弱类型ViewData[“”]
3)View中的强类型ViewData.Model
4)Html.Encode=<%:%>
<%:%> 相当于<%=Html.Encode()%>,推荐大家使用<%:%>,方便简洁.
5)Html.Helper类
Form表单:
方式一:{}
<%using(Html.BeginForm("HandleForm", "Home")) %><% { %><!-- Form content goes here --><% } %>
方式二:Begin End
<% Html.BeginForm(); %><!-- Form content goes here --> <%Html.EndForm(); %>
6)Html.Helper扩展方法
1) 扩展方法:
1.方法所在的类必须是静态的
2.方法也必须是静态的
3.方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。
4.在第一个参数前面还需要有一个this关键字。
2)在MVC中扩展HtmlHelper后,要在使用扩展方法的页面上引用扩展方法所在的名称空间
例如:
<%@ ImportNamespace="MVCDemo.Models" %>
7)客户端验证
1) 要使用客户端验证,必须引入JS脚本支持
MicrosoftAjax.jsMicrosoftMvcAjax.jsMicrosoftMvcValidation.js
2)添加语句
<%Html.EnableClientValidation(); %>
3).NET 框架中的System.ComponentModel.DataAnnotations命名空间包括了众多可为你所用的内置验证特性,介绍用的最多的其中的四个:[Required], [StringLength],[Range], 和[RegularExpression]。
定义自己的定制验证特性,然后应用它们。你可以通过继承自System.ComponentModel.DataAnnotations命名空间中 的ValidationAttribute基类,定义完全定制的特性。
(8) 实体类验证:
[MetadataType(typeof(Customer_Validate))] public partial class CustomerSet { } [Bind(Include="ID")] public class Customer_Validate { [Required(ErrorMessage="*")] [StringLength(50,ErrorMessage="在¨²50字Á?符¤?之?内¨²")] publicstring FirstName { get; set; } [Required(ErrorMessage = "*")] [StringLength(50, ErrorMessage = "在¨²50字Á?符¤?之?内¨²")] publicstring LastName { get; set; } [RegularExpression(@"^[0-9]*$",ErrorMessage="请?输º?入¨?正y确¨¡¤的Ì?电Ì?话¡ã号?码?")] publicstring Phone { get; set; } }
- Asp.net-知识总结(6)
- Asp.net-知识总结(1)
- Asp.net-知识总结(2)
- Asp.net-知识总结(3)
- Asp.net-知识总结(4)
- Asp.net-知识总结(5)
- Asp.net-知识总结(7)
- asp.net零星知识总结
- ASP.NET知识点总结---技术性知识(2)
- ASP.NET知识点总结---技术性知识(1)
- ASP.NET知识点总结---概念性知识(2)
- ASP.NET的知识点总结--概念性知识(1)
- ASP.NET(MVC)三层架构知识的学习总结
- ASP.NET知识总结(1.网络传输层)
- ASP.NET知识总结(3.HTTP协议详解)
- ASP.NET知识总结(7.状体保持)
- ASP.NET知识总结(8.AJAX异步)
- ASP.NET MVC5 路由知识总结
- Ubuntu14.04安装Matlab2014a
- TopCoder SRM 664 Div2 Level One
- 八皇后问题
- 【HDOJ 4970】 Killing Monsters
- 《MFC游戏开发》笔记二 建立工程、调整窗口
- Asp.net-知识总结(6)
- springMVC --拦截器详细,使用和自定义拦截器
- 伪类after
- 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
- UVA 11235 Frequent values (RMQ)
- hdu5199Gunner(二分查找)
- Android Funcitons Collection
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
- wince web service 使用