Entity Framework综合应用

1,Linq简介

全称 Language Integrated Query 即语言集合查询,集成到.net语言中的,即可以使用C#,VB等语言中。支持查询数据源,包括一般的.net对象,如数组,集合,xml,关系数据库

可分为 linq to objects . linq to xml ,linq to datasets, linq to sql 和 linq to entities 技术。

linq实现的内部机制是比较复杂的,然而对于使用它的开发人员来说,使用起来非常方便,一般常使用的是查询表达式,使用它只需要很少的代码就能实现,数据源查询,复杂筛选,排序和分组。

让我们来看看它的语法

from 变量

        in  数据源对象

        where  条件表达式

    orderby 排序列 [ascending][descending]

group  分组条件

into 临时标识符

  select 选择列

看,是不是非常类似sql的语法,只是用法类似,机制还是有很大差别的。

【1】 linq to objects 有三种可操作类型,字符串,泛型集合,普通集合。

下面我们来看例子

linq to string

代码:

   string name = "zhangsan";
            var k= from n in name
                   where n==‘z‘  筛选每个char 中有z的
                  select n;  这里的n代表一个字符
            foreach (var item in k)
            {
                Console.WriteLine(item);
            }

结果为z

//linq to List<T>

List<string> lists = new List<string> {
              "张三", "李三1", "张三2","李三3"
            };
            var k = from z in lists
                    where z.StartsWith("张")//筛选字符串中第一个char有张的。
                    select z;
            foreach (var item in k)
            {
                Console.WriteLine(item);
            }
            //结果为张三 张三2,

//linq to ArrayList  与泛型的差不多,有感兴趣的可以去查看具体

但是什么样的对象支持linq查询呢?

一般只要看对象是否实现了IEnumerable<T>接口,如果实现了肯定可以使用。

查询表达式和查询方法

简单对比一个字符串

string name="zhangsan";

查询表达式

from n in name

select n;

查询方法

name.Select(n=>n);这里传的是一个lamda表达式。

很多情况下,查询方法与查询表达式都是混用的,当然查询方法很多,详细的可查看官方文档,这里只是点出使用方法。

【2】linq to entities 实际上就是将DbContext对象包含的各种集合对象作为数据源,这些集合对应的类型为DbSet<T>或ICollection<T>,二者都支持linq操作。linq to entities与 to  objects 在查询编码上类似,但在原理上却大不一样。

using(MyDbEntities db=new MyDbEntities()){//前面讲过通过new出数据源上下文

var k=from s in db.users  //从数据库获取users表,这里只是获得了一条筛选语句,并没有真正执行,只有在使用到里面的数据的时候才会执行数据库操作,大可不必担心效率问题

where s.name.StartsWith("张")

   select s;

}

在实际的  linq to entities查询表达式中,假如数据库中有一列数据为时间类型,如果通过 where s.time>DateTime.Parse("1990-4-4")这样的查询会出现异常,因为牵扯到一个存储区问题,只有使用规范函数才能转换为相应的存储区函数。相应的表,请寻找增加学习能力。

查询多表数据

在 entity frameword中 会根据关系数据库中的主外键关系生成导航属性,导航属性默认定义为virtual属性。

只要关系数据库的关系完整,那么通过查询的数据就可以使多表的。

但如果表之间没有这种关系,就必须使用 join连接查询了

语法

var k= from s in db.users//用户表

    join g in db.usertypes//关联用户类型表

    on s.typeid equals g.typeid//关联条件

select new {s.name,g.name}//查出用户名字,和用户类型名

关于entity framework中性能优异上的选择,有一种使用变量和不使用变量的不同写法

如   第一种

var  k= from s in db.users

where s.name=="张三"

     select s;

var kk=k.ToList();

第二种   

string name=张三";

var  k= from s in db.users

where s.name==name

     select s;

var kk=k.ToList();

性能优化

第二种性能要优于第一种,因为底层第二种通过调用存储过程来执行,而第一种每一次使用都要重新编译在执行,而使用存储过程的话只预编译一次。建议使用第二种方式。

context.Configuration.AutoDetectChangesEnabled =false;//该语句用于不启用自动状态跟踪功能

如果启用自动跟踪将会使Add()操作耗费大量性能,会导致DbContext遍历所有缓存的Entry,比较他们的原始值和当前值。

本地数据缓存,指临时文件交换区,把某些数据临时存放在某个地方,用时再取,这样效率更高。

例:

db.users.Count();//这里已经拿到

那么下次再使用 db.users.Local.Count();即可

     

时间: 2024-11-06 03:57:06

Entity Framework综合应用的相关文章

C#综合揭秘——Entity Framework 并发处理详解

引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都为并发控制提供好良好的支持方案. 并发处理方式一般分为乐观必并发与悲观必并发两种,本文将为大家介绍 Entity Framework . LINQ to SQL 中的并发处理方式.在本文最后,将提供一个了可参考的方案,结合事务 Transaction 处理复杂性对象的并发. 目录 一.并发处理的定义

《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述 (转)

微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF版本更新太快,没人愿意去花时间翻译国外关于EF的书籍.使用Entity Framework开发已经有3年多了,但用得很肤浅,最近想深入学习,只好找来英文书<Entity Framework 6 Recipes>第二版,慢慢啃.首先需要说明的是,我英文不好,只是为了学习EF.把学习的过程写成博客,一

Entity Framework教程(第二版)

源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,EF6.1已经发布很久,EF7马上就到来.那篇文章已经显得相当过时,这期间园子里出现了很多介绍EF4/5/6版本的精彩文章,我的工作中也没有在持续使用EF,本来也就不准备再写现在这篇文章了.后来看到之前那篇文章还是有很多朋友在评论里给予鼓励,再加上自己确实在使用新版EF的过程中也总结了一些心得,解决了

Entity Framework技术系列之7:LINQ to Entities

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据.LINQ提Entity Framework技术系

[转]Entity Framework教程(第二版)

源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,EF6.1已经发布很久,EF7马上就到来.那篇文章已经显得相当过时,这期间园子里出现了很多介绍EF4/5/6版本的精彩文章,我的工作中也没有在持续使用EF,本来也就不准备再写现在这篇文章了.后来看到之前那篇文章还是有很多朋友在评论里给予鼓励,再加上自己确实在使用新版EF的过程中也总结了一些心得,解决了

Entity Framework 并发处理详解

引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都为并发控制提供好良好的支持方案.并发处理方式一般分为乐观必并发与悲观必并发两种,本文将为大家介绍 Entity Framework . LINQ to SQL 中的并发处理方式.在本文最后,将提供一个了可参考的方案,结合事务 Transaction 处理复杂性对象的并发. 目录 一.并发处理的定义

Entity Framework的查询

Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). 1.简单查询: SQL: SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: //Func形式 var clients = ctx.Clients.Where(c => c.Type == 1 && c.D

Entity Framework 6 Recipes 2nd Edition(9-3)译-&gt;找出Web API中发生了什么变化

9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Frist实现数据访问管理. 本例,我们模拟一个N层场景,用单独的客户端(控制台应用)来调用单独的基于REST服务的Web网站(WEB API应用) . 注意:每层使用单独的Visual Studio 解决方案, 这样更方便配置.调试和模拟一个N层应用. 假设有一个如Figure 9-3所示的旅行社和预订

Entity Framework 学习

Entity Framework 学习初级篇1--EF基本概况... 2 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍... 7 Entity Framework 学习初级篇3-- LINQ TOEntities. 10 Entity Framework 学习初级篇4--EntitySQL. 17 Entity Framework 学习初级篇5--ObjectQ