首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

金三银四面试:C#.NET面试题中高级篇5-Linq和EF

目录 1.EF(Entity Framework)是什么? 2.什么是ORM? 3.为什么EF而不用原生ADO.NET? 4.如何提高LINQ性能问题? 5.什么是IEnumerable?...Code FirstCode First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入功能。...ORM指的是面向对象对象模型和关系型数据库数据结构之间互相转换。 (表实体跟表之间相互转换) ORM框架有很多,EF框架是ORM框架其中一种,是实现了ORM思想框架。...O=>表实体 M=>映射关系 R=>数据库.表 --->详解 3.为什么EF而不用原生ADO.NET?...1).极大提高开发效率:EF是微软自己产品,开发中代码都是强类型, xiefl代码效率非常高,自动化程度非常高,命令式编程. 2).EF提供模型设计器非常强大,不仅仅带来了设计数据库革命,也附带来自动化模型代码

4K30
您找到你想要的搜索结果了吗?
是的
没有找到

依赖注入: 创建一个简易版DI框架

最终用来创建服务实例工厂体现为一个类型为Func委托对象,它具有的两个输入分别代表当前使用Cat对象以及提供服务类型泛型参数列表,如果提供服务类型并不是一个泛型类型...如下面的代码片段所示,我们在调用该方法时候需要指定对应ServiceRegistry和服务对象泛型参数。...如果提供服务实例实现了IDisposable接口,在采用Root生命周期模式下会被保存到作为根容器Cat对象待释放列表中,如果生命周期模式为Self,它会被添加到当前Cat对象待释放列表中。...由于服务注册添加总是需要调用Cat自身Register方法来完成,所以这些方法最终都需要创建一个代表服务注册ServiceRegistry对象。...对于一个ServiceRegistry对象来说,它最为核心莫过于表示服务实例创建工厂Func对象,所以上述这4个扩展方法需要解决就是创建这么一个委托对象

56640

【5min+】帮我排个队,谢谢。await Task.Yield()

它们是为异步编程提供语法糖,便于我们在代码中更便捷进行异步操作。 await 和 async其实是对Task对象都一层包装操作。...所以您会优先把位置让给后面真正要吃饭的人去座。 我们处理器也是有处理能力极限(具体看核心数和线程数),就好比火锅店桌位也是有极限,反正场子只能摆下那么多桌子。...所以,我们有没有办法像上面排号一样,虽然轮到我了,我只排号,让真正需要使用资源的人去使用。...来吧,我们代码来演示这个场景: public class AwaitYieldDemo { public void MockHotPotRestaurant() {...那么,它和我们传统关键字yield return有什么联系吗? 对于传统yield return关键字,它会返回一个IEnumerable对象,该对象可以被我们使用foreach语法糖来进行迭代。

2.2K30

一步步学习EF Core(3.EF Core2.0路线图)

因为EF Core是一个新代码库,所以在Entity Framework 6.x中存在一个功能并不意味着会在EF Core中实现。...具体区别请移步:比较EF Core和EF6.x 我们提供了我们认为重要但还没实施功能列表。...数据播种(#629) - 允许在模型中指定数据库初始数据,并自动填充到数据库中。...简单日志记录API(#1199) - 我们想要一个简单方法来记录正在执行SQL(就像Database.Log从EF6.x)。我们还需要一种简单方法来查看正在记录内容。...而且听取了很多社区中好意见和建议(每个功能后面的"#一串数字",就是GithubIssues) 嗯,从EF4.0EF一直到现在,也算是死忠粉了.最后说一下我个人比较关注几个功能. 1.上下文池(

3K90

.NET中那些所谓新语法之四:标准查询运算符与LINQ

多个为IEnumerable准备扩展方法。   ...从上图可以看出,在Enumerable类中提供了很多扩展方法,这里我们选择其中几个最常用方法来作一点介绍,使我们能更好地利用它们。...方法返回仍然是一个IEnumerable类型,仍然可以继续使用扩展方法。...在实际开发中,我们往往会使用一些ORM框架例如EF去操作数据库,Where方法使用则是每次调用都只是在后续生成SQL语句时增加一个查询条件,EF无法确定本次查询是否已经添加结束,所以没有办法木有办法在每个...Where方法执行时候确定最终SQL语句,只能返回一个DbQuery对象,当使用到这个DbQuery对象时候,才会根据所有条件生成最终SQL语句去查询数据库。

2K30

.NET面试题系列 - LINQ:性能

你确定你会遍历整个序列多于一次时候 如果序列不是很大时候(因为ToList / ToArray / ToDictionary等方法将会在堆上分配一个序列对象) 是否返回IEnumerable...你可以通过在IEnumerable上调用AsQueryExpr方法来令LinqOptimizer优化你LINQ语句。使用Run方法执行: ?...例如EF使用了反射,但如果你ORM只用于你开发软件,所有的情况你都可以事先预计,那你也可以不用反射 而大部分ORM开发出来目标仅仅是: 令查询语法更加接近SQL 加入了若干语法糖或代码生成快捷方式...,令编写代码速度稍微加快 性能和EF相差无几,有些甚至还不如EF 没有经过彻底测试 自学使用 通常,自己开发一套ORM需要很长时间,才能保证没有错误,并用于生产环境。...大部分情况下,EF已经是一个不错选择。性能是双刃剑,它可能也会毁了你代码,让你代码难以维护。 LINQ性能问题:总结 使用LINQPad等工具观察生成SQL。

2.6K40

ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidatorProvider

在《ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidator》中我们介绍了ASP.NET MVC用于Model验证四种ModelValidator...如下面的代码片断所示,ModelValidator提供实现在抽象方法GetValidators种,返回是一个ModelValidator集合。...如下面的代码片断所示,AssociatedValidatorProvider定义一个受保护虚方法GetTypeDescriptor用于获取指定类型描述对象(其类型实现了接口ICustomTypeDescriptor...被解析出来关联特性最终传入抽象GetValidators方法实现了对ModelValidator提供,而DataAnnotationsModelValidatorProvider正是实现了这个方法来创建相应...然后使用这个列表每个具体ModelValidator对一个Contact对象实施验证,并将ModelValidator类型和作为验证结果ModelValidationResult对象ErrorMessage

1.4K10

.NET面试题系列 - IEnumerable派生类

程序实现很简单,代码留作练习。 Queue 当我们需要使用先进先出顺序(FIFO)数据结构时,.NET 为我们提供了Queue。...Queue类提供了Enqueue和Dequeue方法来实现对Queue存取。队列另外一个主要操作就是查看起始数据项。...实现一个带优先队列,只需要为队列本身加入一个优先属性,在入队时,必须指定一个优先级。出队时,沿着优先级别遍历队列,拥有最高级别的且排在最前成员将会被移出队列。...线性表和链表(使用最多对象): Array (T[]):当元素数量是固定,并且需要使用索引器时。...Linked list (LinkedList):当元素数量不是固定,且存在大量列表头尾添加动作时。否则使用 List。

1.7K20

ASP.NET MVC 5 -从控制器访问数据模型

,Visual Studio会自动包含 @model语句到Index.cshtml文件顶部 @model IEnumerable 此@model声明使得控制器可以将强类型电影列表...(是IEnumerable对象),所以在循环中每个item对象类型是Movie类型。...使用SQL Server LocalDB Entity Framework Code First(代码优先),如果检测到不存在一个数据库连接字符串指向了Movies数据库,会自动创建数据库。...注意:ID旁边钥匙图标。默认情况下,EF将创建一个名为ID主键。欲了解更多EF和MVC信息,请参阅Tom Dykstra's优秀教程MVC and EF。 ?...现在,您可以在这个简单列表页面里:显示、编辑、更新、删除数据库里数据了。在下一次教程中,我们会继续看看scaffolded自动生成其它代码

5.8K50

依赖注入:一个Mini版依赖注入框架

由于服务实例生命周期完全由作为依赖注入容器Cat对象来管理,那么通过调用Dispose方法来释放服务实例自然也应该由它来负责。...如下面的代码片段所示,我们在调用该方法时候需要指定对应ServiceRegistry对象服务类型泛型参数。...如果服务实例类型实现了IDisposable接口,该对象会被添加到_disposables字段表示待释放服务实例列表中。...如果提供服务实例实现了IDisposable接口,在采用Root生命周期模式下会被保存到作为根容器Cat对象待释放列表中。如果生命周期模式为Self,它会被添加到当前Cat对象待释放列表中。...对于一个ServiceRegistry对象来说,它最为核心元素莫过于表示服务实例创建工厂Func对象,所以上述这六个扩展方法需要解决就是创建这么一个委托对象

1.3K20

ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

主要集中增删该查每个模块都有,所以本次是为封装相同接口方法    如果你想了解怎么重构普通接口DAL层请查看第二节点    如果你只想了解利用T4链接EF生成代码,可以忽略前两节,之后跳后最后T4模版使用...代码生成策略 改变生成策略为T4 添加TT模版 重构DAL层 创建ICommonRepository接口 实现ICommonRepository方法 T4模版使用 1.改变EF代码生成策略旧...这个项目我最初开始创建时候EF版本为EF4.0当时EF4.0只提供了ObjectContext API接口模式 这个访问方式只能对于DataBase Frist,不能用于Code Frist.所以一直用到这里...其中不同之处只有SysSample模型 好在.net提供索引访问对象强类型List这里T代表SysSamle。...也许在以后业务层也有必要重构! 最后我完全修改了我项目的DAL层。数据直接说话 ? ? 整整少了两万行。却完成了相同功能。(代码类型.cs,与事实可能有点差别,但是可以效果明显) 代码参考下载。

1.9K60

eShopOnContainers 知多少:Identity microservice

核心技术选型: MVC单层架构 EF Core ASP.NET Core Identity IdentityServer4 SQL Server 数据库 Autofac PS:对ASP.NET Core...[第三方身份提供商列表]),以及双重验证,同时内置支持Bearer 认证(令牌认证)。...认证主要与以下几个核心对象打交道: Claim(身份信息) ClaimsIdentity(身份证) ClaimsPrincipal (身份证持有者) AuthorizationToken (授权令牌)...授权流程简介 授权就是对于用户身份信息(Claims)验证,,授权又分以下几种种: 基于Role授权 基于Scheme授权 基于Policy授权 授权主要与以下几个核心对象打交道: IAuthorizationRequirement...SeedAsync(context, configuration) .Wait(); })//迁移配置数据库 .Run(); } 至此,本服务核心代码已解析完毕

2.8K20

EF Core关系配置

执行实体相关查询原生SQL语句 如果要执行原生SQL是一个查询语句,并且查询结果也能对应一个实体,就可以调用对应实体DbSetFromSqlInterpolated()方法来执行一个查询SQL...) 更新到数据库; “已删除”实体,SaveChanges() 从数据库删除; 查看实体状态: 使用DbContextEntry()方法来获得实体在EF Core中跟踪信息对象EntityEntry...EF Core优化之AsNoTracking 如果通过DbContext查询出来对象只是用来展示,不会发生状态改变,则可以使用AsNoTracking()来 “禁用跟踪”。...,对代码可读性、可维护性不强,代码可读性、可维护性不强。...否则为了提高代码可读性和可维护性,要尽量避免动态构建表达式树。而是IQueryable延迟执行特性来动态构造。

8010

理解 ASP.NET Core - 配置(Configuration)

约定:越后添加配置提供程序优先级越高,优先级高配置值会覆盖优先级低配置值 在 主机(Host)中,我们介绍了Host启动流程,根据默认配置提供程序添加顺序,默认优先级从低到高为(我顺便将...value string this[string key] { get; set; } // 获取当前配置节点 直接 子节点列表 IEnumerable<IConfigurationSection...Get 通过ConfigurationBinder.Get方法,可以将配置以强类型方式绑定到选项对象上: public class Startup { public Startup(IConfiguration...string.Join(" & ", book.Authors)}"); } } Bind 与上方Get方法类似,通过ConfigurationBinder.Bind 方法,可以将配置以强类型方式绑定到已存在选项对象上...,读取到EF配置呢?

2.2K21

C#迭代器与LINQ查询操作符

(1)使用 针对集合类型编写foreach代码块,都是在使用迭代器 集合类型实现了IEnumerable接口 都有一个GetEnumerator方法 (2)迭代器优点 假如要遍历一个庞大集合...2.IEnumerable接口是LINQ特性核心接口 只有实现了IEnumerable接口集合,才能执行相关LINQ操作,比如select,where等 LINQ 1.查询操作符 (1)源起....net设计者在类库中定义了一系列拓展方法,方便用户操作集合对象。...(2)使用 一些系列拓展方法,eg:Where,Max,Select,Sum,Any,Average,All,Concat等都是针对IEnumerable对象进行拓展, using System;...>(){a.Tostring();}}; 查询表达式 (1)源起 查询早做副表示扩张方法来操作及和,虽然已经比较方便,但可读性和代码语义来考虑,仍有不足,于是产生了查询表达式写法。

1K20
领券