zoukankan      html  css  js  c++  java
  • ADO.NET Entity Framework 基本概述

    时间过得很快转眼间VS已经2010版了,在4月12日将会正式发布VS 2010

    ADOEF 做为.Net 4.0 中被微软推荐的ORM框架,相比.Net 3.5 sp1 已经得到了进一步的增强,使用它我们可以针对我们的业务对象来编程和创建数据访问,而不是原来的数据库操作,极大的减少了代码的编写和程序的维护开支,使代码更简洁美观。

    相比原始的开发模型ADOEF拥有诸多的优点:

    1.ADOEF模型中可以详细的描述数据库中的表关系,并映射到模型当中来。

    2.相比Linq to SQL ,ADOEF 可以支持更多的数据库,并提供了统一的模型。可以建立多个概念模型来映射同一个数据库

    3.可以方便灵活的更新ADOEF与数据库的映射,应对数据库的变化

    4.提供了更强大的语法检查和验证模型。

    实体框架结构图

    实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。在EF中的实体数据模型(EDM)它提供以下方式用于查询 EDM 并返回对象:

    1. LINQ to Entities -- 提供语言集成查询 (LINQ) 支持用于查询在概念模型中定义的实体类型。

    2. Entity SQL -- 与存储无关的 SQL 方言,直接使用概念模型中的实体并支持诸如继承和关系等 EDM 功能。

    3. 查询生成器方法 --可以使用 LINQ 风格的查询方法构造 Entity SQL 查询。

     

    模型的建立可以参考:ADO.NET Entity Framework 一个简单数据绑定例子

     

    语法说明:

    引用命名空间:

    using System.Data.Objects;
    using NorthwindModel; //EF模型
     首先我们查询所有的Customer,代码和Linq To SQL中的十分相似。
     using (NorthwindEntities ctx = new NorthwindEntities()) //建立edm
     {
         foreach (var customer in ctx.Customers) //获得实体集合
         {
             Console.WriteLine(customer.CustomerID);
         }
     }

    Entity SQL Language 查询某个Customer,

    Customer alfki = ctx.Customers.Where("it.CustomerID = 'ALFKI'").First();

    "it.CustomerID = 'ALFKI'"     表示查询条件语句,该语句看着又像C#代码又像SQL,被成为Entity SQL Language。

    Linq To Entities,需要引用System.Linq命名空间。

     
    方法1 
    Customer alfki = ctx.Customers.First<Customer>(it => it.CustomerID == "ALFKI");
     
    方法2
     Customer alfki = (from c in ctx.Customers
                      where c.CustomerID == "ALFKIA"
                      select c).First();
     
    在Entity Framework中进行一对多的查询很简单,如果建立了数据库关系,便可以直接使用。
    但是值得注意的是Entity Framework默认是Lazy Load,即关联数据在需要的时候才加载。如果直接查询该Customer关联的orders,查询不到结果。
     
    Customer alfki = ctx.Customers.First<Customer>(it => it.CustomerID == "ALFKI"); //获得客户 
    foreach (var order in alfki.Orders) //遍历客户的订单
     {
         Console.WriteLine(order.OrderID);
     }

    需要在使用orders之前调用 alfki.Orders.Load(), 再次运行便可以得到正确的结果。

    参考文章:

    http://msdn.microsoft.com/zh-cn/library/bb399572.aspx

    http://www.cnblogs.com/blusehuang/archive/2007/10/10/920020.html

    冯瑞涛
  • 相关阅读:
    死锁
    线程池
    jQuery param()作用与使用方法
    jQuery remove()与jQuery empty()的区别
    jQuery局部动态刷新
    jQuery事件函数位置放置的两种方法
    跨语言通信方案的比较—Thrift、Protobuf和Avro
    Nodejs下如何判断文件夹的存在以及删除文件夹下所有的文件
    如何缓存hbase数据以减少下次取数据的时间
    javascript Date对象的介绍及linux时间戳如何在javascript中转化成标准时间格式
  • 原文地址:https://www.cnblogs.com/finehappy/p/1680162.html
Copyright © 2011-2022 走看看