EF 6.0

最近又开始研究EF框架了 哎 搞的东西太杂了 网上的参考了一篇博客 但是他是基于EF 4.0之前做的 所以自己基于他的博客来构造EF 6.0的使用基础

命名空间不同:

旧版本:using System.Data.Objects;

新版本System.Data.Entity

入门看看就行了

 

概念:

在.Net Framework SP1微软包含一个实体框架(Entity Framework),此框架可以理解成微软的一个ORM产品。用于支持开发人员通过对概念性应用程序模型编程(而不是直接对关系存储架构编程)来创建数据访问应用程序。目标是降低面向数据的应用程序所需的代码量并减轻维护工作。

实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。

·                 概念架构定义语言文件 (.csdl) -- 定义概念模型。

·                 存储架构定义语言文件 (.ssdl) -- 定义存储模型(又称逻辑模型)。

·                 映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射。

实体框架 使用这些基于 XML 的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM 甚至支持将概念模型中的实体映射到数据源中的存储过程。它提供以下方式用于查询 EDM 并返回对象:

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

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

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

 

 

接着说说重要的类

DBcontext 上下文容器 提供基础查询

DBQuery 查询接口 进行复杂查询

 

注意:上下文的操作必须放在Using里面 因为上下文是对数据库操作 必须及时释放资源

 

LINQ TO Entities

 

 1.查询

            using (Entities entity = new Entities())
            {
                DbQuery<Sys_ExamPageIndex> query = entity.Sys_ExamPageIndex;
                IQueryable<Sys_ExamPageIndex> cust1 = from c in query select c;
                Assert.IsNotNull(cust1);

                //使用ObjectQuery类的ToTraceString()方法显示查询SQL语句

                Console.Out.WriteLine(cust1.First().page_name);

            }

 

利用Linq获得查询返回集合IQueryable

 

2.条件查询

//基于表达式的查询语法

    IQueryable<Customers> cust1 = from c in customers

                                  where c.CustomerID == "ALFKI"

                                  select c;

//基于方法的查询语法

    var cust2 = edm.Customers.Where(c => c.CustomerID == "ALFKI");

 

3.排序和分页

 

在使用SkipTake方法实现分页时,必须先对数据进行排序,否则将会抛异常。

 

//基于表达式的查询语法

         ObjectQuery<Customers> customers = edm.Customers;

         IQueryable<Customers> cust10 = (from c in customers

                                         orderby c.CustomerID

                                         select c).Skip(0).Take(10);


//基于方法的查询语法

    var cust = edm.Customers.OrderBy(c => c.CustomerID).Skip(0).Take(10);

 

4.聚合

 

可使用的聚合运算符有AverageCountMaxMin Sum

 

using (var edm = new NorthwindEntities())

   {

       var maxuprice = edm.Products.Max(p => p.UnitPrice);

       Console.WriteLine(maxuprice.Value);

 }

 

5.连接

可以的连接有Join 和 GroupJoin 方法。GroupJoin组联接等效于左外部联接,它返回第一个(左侧)数据源的每个元素(即使其他数据源中没有关联元素)。

 

using (var edm = new NorthwindEntities())

    {

       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

                     };

        foreach (var q in query)

         Console.WriteLine("{0},{1},{2}",q.OrderId,q.ProductId,q.UnitPrice);

}

二、LINQ to Entities 查询注意事项

l           排序信息丢失

如果在排序操作之后执行了任何其他操作,则不能保证这些附加操作中会保留排序结果。这些操作包括 Select 和 Where 等。另外,采用表达式作为输入参数的 FirstFirstOrDefault 方法不保留顺序。

如下代码:并不能达到反序排序的效果

using (var edm = new NorthwindEntities())

{

     IQueryable<Customers> cc = edm.Customers.OrderByDescending(c => c.CustomerID).Where(c => c.Region != null).Select(c => c);

     foreach (var c in cc)

          Console.WriteLine(c.CustomerID);

}

l           不支持无符号整数

由于 实体框架不支持无符号整数,因此不支持在 LINQ to Entities 查询中指定无符号整数类型。如果指定无符号整数,则在查询表达式转换过程中会引发 NotSupportedException异常,并显示无法创建类型为“结束类型”的常量值。此上下文仅支持基元类型(“例如 Int32、String 和 Guid”)。

如下将会报异常的代码:

using (var edm = new NorthwindEntities())

 {

      uint id = UInt32.Parse("123");

      IQueryable<string> produt = from p in edm.Products

                                  where p.UnitPrice == id

                                  select p.ProductName;

      foreach (string name in produt)

            Console.WriteLine(name);

}

上面的代码中,由于id是uint而不是Int32,String,Guid的标量类型,所以在执行到where p.UnitPrice ==id这个地方时,会报异常。

l           不支持引用非标量闭包

不支持在查询中引用非标量闭包(如实体)。在执行这类查询时,会引发 NotSupportedException 异常,并显示消息“无法创建类型为“结束类型”的常量值。此上下文中仅支持基元类型(‘如 Int32、String 和 Guid’)

如下将会报异常的代码:

using (var edm = new NorthwindEntities())

 {

        Customers customer = edm.Customers.FirstOrDefault();

        IQueryable<string> cc = from c in edm.Customers

                                where c == customer

                                select c.ContactName;

         foreach (string name in cc)

               Console.WriteLine(name);

}

转载于:https://www.cnblogs.com/Dhouse/p/3568990.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core 6.0 是微软推出的一个跨平台的开发框架。在这个版本中,Entity Framework Core 6.0EF Core)作为其默认的对象关系映射(ORM)工具,被广泛应用于开发项目。 ASP.NET Core 6.0 中的项目代码主要由以下几个部分组成: 1. 控制器(Controllers):控制器是处理用户请求的核心部分。ASP.NET Core 使用路由来映射 URL 到相应的控制器操作。通过定义不同的动作方法,控制器可以处理 GET、POST、PUT、DELETE 等不同类型的请求,并返回相应的动态页面或数据。 2. 视图(Views):视图是用来展示数据的部分,通常是用 HTML、CSS 和 JavaScript 编写的。ASP.NET Core 中的视图使用 Razor 语法,可以直接访问模型数据并生成动态的 HTML 页面。视图可以与控制器中的动作方法相对应,通过模型和视图数据共同呈现页面内容。 3. 模型(Models):模型是用来定义数据结构和业务逻辑的部分。在 EF Core 中,通过定义实体类来表示数据库表,每个属性对应表中的一列。模型还包括对数据的验证规则以及与数据库的交互。 4. 中间件(Middleware):中间件是位于请求管道中的组件,可以对请求和响应进行处理和转换。ASP.NET Core 6.0 中的中间件可以在请求进入控制器之前或之后对其进行拦截和处理,用于实现身份认证、日志记录、异常处理等功能。 5. 数据访问层(Data Access Layer):在 EF Core 中,数据访问层用于与数据库进行交互。通过 EF Core 提供的 API,开发者可以轻松地执行查询、更新、插入和删除等操作,并且不需要编写大量的原始 SQL 语句。 综上所述,ASP.NET Core 6.0 项目代码包括控制器、视图、模型、中间件和数据访问层等多个部分,它们相互配合完成从用户请求到数据响应的整个过程,实现了一个完整的 Web 应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值