目录
1.EF(Entity Framework)是什么?
2.什么是ORM?
3.为什么用EF而不用原生的ADO.NET?
4.如何提高LINQ性能问题?
5.什么是IEnumerable?
6.IEnumerable的缺点有哪些?
7.延迟执行 (Lazy Loading)是什么?
8.LINQ可视化工具简单介绍一下?
9.LINQ to Object和LINQ to SQL有何区别?
10.除了EF,列举出你知道的ORM框架?
11.在哪些类型额项目中你会选择EF? 为什么?
12.请说明EF中映射实体对象的几种状态?
1.EF(Entity Framework)是什么?
实体框架EF是http://ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。
主要有三种方式:
Database FirstDatabase First”模式
我们称之为“数据库优先”,前提是你的应用已经有相应的数据库,你可以使用EF设计工具根据数据库生成数据数据类,你可以使用Visual Studio模型设计器修改这些模型之间对应关系。
Model FirstModel First我们称之为“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,此时你的应用并没有设计相关数据库,在Visual Studio中我们通过设计对于的数据模型来生成数据库和数据类。
Code FirstCode First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入的功能。
使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域模型的实现过程),然后自动生成数据库。这样设计的好处在于我们可以针对概念模型进行所有数据操作而不必关心数据的存储关系,使我们可以更加自然的采用面向对象的方式进行面向数据的应用程序开发。
2.什么是ORM?
ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的互相转换。
(表实体跟表之间的相互转换)
ORM框架有很多,EF框架是ORM框架的其中一种,是实现了ORM思想的框架。
O=>表实体
M=>映射关系
R=>数据库.表
--->详解
3.为什么用EF而不用原生的ADO.NET?
1).极大的提高开发效率:EF是微软自己的产品,开发中代码都是强类型的, xiefl代码效率非常高,自动化程度非常高,命令式的编程.
2).EF提供的模型设计器非常强大,不仅仅带来了设计数据库的革命,也附带来的自动化模型代码的 功能也极大的提高开发和架构设计的效率.
3).EF跨数据支持的是ORM框架主要功能点之一,带来的是可以通过仅仅改变配置就可以做到跨数据库的能力
4.如何提高LINQ性能问题?
提升从数据库中拿数据的速度,可以参考以下几种方法:
1).在数据库中的表中定义合适的索引和键
2).只获得你需要的列(使用ViewModel或者改进查询)和行(使用IQueryable)
3).尽可能使用一条查询而不是多条
4).只为了展示数据,而不进行后续修改时,可以使用AsNoTracking。它不会影响生成的SQL,但它可以令系统少维护很多数据,从而提高性能
5).使用Reshaper等工具,它可能会在你写出较差的代码时给出提醒
---->详解
5.什么是IEnumerable?
IEnumerable及IEnumerable的泛型版本IEnumerable是一个接口,它只含有一个方法GetEnumerator。Enumerable这个静态类型含有很多扩展方法,其扩展的目标是IEnumerable。
实现了这个接口的类可以使用Foreach关键字进行迭代(迭代的意思是对于一个集合,可以逐一取出元素并遍历之)。实现这个接口必须实现方法GetEnumerator。
---->详解
6.IEnumerable的缺点有哪些?
IEnumerable功能有限,不能插入和删除。
访问IEnumerable只能通过迭代,不能使用索引器。迭代显然是非线程安全的,每次IEnumerable都会生成新的IEnumerator,从而形成多个互相不影响的迭代过程。
在迭代时,只能前进不能后退。新的迭代不会记得之前迭代后值的任何变化。
7.延迟执行 (Lazy Loading)是什么?
大部分LINQ语句是在最终结果的第一个元素被访问的时候(即在foreach中调用MoveNext方法)才真正开始运算的,这个特点称为延迟执行。一般来说,返回另外一个序列(通常为IEnumerable或IQueryable)的操作,使用延迟执行,而返回单一值的运算,使用立即执行。
IEnumerable是延迟执行的,当没有触发执行时,就不会进行任何运算。Select方法不会触发LINQ的执行。一些触发的方式是:foreach循环,ToList,ToArray,ToDictionary方法等
8.LINQ可视化工具简单介绍一下?
LINQPad工具是一个很好的LINQ查询可视化工具。它由Threading in C#和C# in a Nutshell的作者Albahari编写,完全免费。它的下载地址是http://www.linqpad.net/
进入界面后,LINQPad可以连接到已经存在的数据库(不过就仅限微软的SQL Server系,如果要连接到其他类型的数据库则需要安装插件)。某种程度上可以代替SQL Management Studio,是使用SQL Management Studio作为数据库管理软件的码农的强力工具,可以用于调试和性能优化(通过改善编译后的SQL规模)。
LINQPad支持使用SQL或C#语句(点标记或查询表达式)进行查询。你也可以通过点击橙色圈内的各种不同格式,看到查询表达式的各种不同表达方式:
Lambda:查询表达式的Lambda表达式版本, SQL:由编译器转化成的SQL,通常这是我们最关心的部分, IL:IL语言
9.LINQ to Object和LINQ to SQL有何区别?
LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。LINQ to Object的数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对的,LINQ to SQL的数据源总是实现IQueryable并使用Queryable的扩展方法。
将查询表达式转换为SQL语句并不保证一定可以成功。
10.除了EF,列举出你知道的ORM框架?
dapper EntityFramework、 EJB、Hibernate、IBATIS、SqlSugar 、freesql
11.在哪些类型额项目中你会选择EF? 为什么?
这个要结合EF的特点来说:EF主要是以面向对象的思想来做数据库数据操作,对Sql语句能力没什么要求,开发使用效率高!便于上手,一般来说,使用EF框架,肯定会比直接使用ADO.NET,消耗的时间多一些。所以在一般企业级开发,管理型系统,对数据性能要求不是特别高的情况下,优先选择EF,这样可以大大的推进开发效率!如果像一些互联网项目中,对性能要求精度很高!可以另外做技术选型,选择原生ADO.NET。
12.请说明EF中映射实体对象的几种状态?
Detached:该实体未由上下文跟踪。刚使用新运算符或某个 System.Data.Entity.DbSet Create 方法创建实体后,实体就处于此状态。
Unchanged:实体将由上下文跟踪并存在于数据库中,其属性值与数据库中的值相同。
Added:实体将由上下文跟踪,但是在数据库中还不存在。
Deleted:实体将由上下文跟踪并存在于数据库中,但是已被标记为在下次调用 SaveChanges 时从数据库中删除。
Modified:实体将由上下文跟踪并存在于数据库中,已修改其中的一些或所有属性值。
版权申明:本文来源于网友收集或网友提供,仅供学习交流之用,尊重原创,如果有侵权,请转告版主或者留言,本公众号立即删除