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; }     }


          

   

0 0
原创粉丝点击