版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EF框架面试题及详细答案(真实面试版)一、EF基础认知类(初级必问)1、什么是EF?EF的核心作用是什么?答案:EF全称EntityFramework,是.NET平台下的开源ORM数据访问框架。核心作用就是把数据库表和实体类做映射,让开发人员可以直接用C#代码操作数据库,不用手写大量重复的SQL语句,彻底告别ADO.NET的拼接SQL、创建Command、读取DataReader等繁琐操作,大幅提升开发效率。简单说:面向对象写代码,框架自动帮我们生成SQL、执行SQL、映射数据。2、EF有几种开发模式?分别是什么场景用?答案:一共三种主流模式(1)DatabaseFirst数据库优先先有数据库、数据表,通过VS工具反向生成实体类和上下文。适合老项目维护、已有成熟数据库的场景,现在新项目用的比较少。(2)ModelFirst模型优先先在VS中画实体模型图,再根据模型生成数据库。自由度低、可控性差,基本已经被淘汰,企业项目几乎不用。(3)CodeFirst代码优先现在企业主流模式。先写C#实体类和配置,通过EF迁移生成数据库和表结构,全程代码驱动,适配版本迭代、持续集成,新项目全部首选。3、什么是DbContext?核心职责是什么?答案:DbContext是EF的核心上下文类,相当于数据库连接和数据操作的总入口。主要职责有四个:1、管理数据库连接,自动打开、释放连接;2、映射实体和数据表关系;3、缓存追踪实体数据状态(新增、修改、删除、未变);4、整合所有数据操作,通过SaveChanges统一提交事务。4、DbSet的作用是什么?答案:DbSet对应数据库中的一张数据表,是我们操作单表数据的核心对象。所有的查询、新增、删除、修改操作,都是基于DbSet完成的。它封装了表的所有操作方法,比如Add、Remove、ToList、FirstOrDefault、Where等。二、EF核心原理与状态追踪(中级高频)1、EF的实体状态有哪几种?分别代表什么含义?答案:EF共有5种实体状态,由上下文统一追踪管理1、Unchanged(未改变):数据从数据库查询出来后,未做任何修改,提交时不生成SQL。2、Added(新增):手动Add的实体,数据库不存在,SaveChanges时执行Insert语句。3、Modified(修改):查询后的实体修改了字段值,SaveChanges时执行Update语句,只更新变动字段。4、Deleted(删除):手动Remove的实体,SaveChanges时执行Delete语句。5、Detached(脱离追踪):实体和上下文没有关联,上下文不管理该实体的任何状态,不会自动生成SQL。2、什么是延迟加载(懒加载)?原理和优缺点是什么?答案:延迟加载就是查询主表数据时,不立即查询关联的外键表数据,只有访问关联属性时,才会自动发起二次查询。开启条件:安装Microsoft.EntityFrameworkCore.Proxies、配置UseLazyLoadingProxies,且导航属性标记为virtual。优点:按需加载,避免一次性查询大量无用关联数据,节省内存。缺点:容易产生N+1查询问题。查1次主表,遍历每条数据时各查1次关联表,数据库请求次数暴增,严重影响性能。3、什么是贪婪加载(急加载)?怎么解决N+1问题?答案:贪婪加载就是查询主表时,通过Include、ThenInclude主动指定需要关联查询的表,一次性联表查询出所有数据。核心作用就是彻底解决延迟加载的N+1问题,单次数据库请求完成主表和关联表查询,减少数据库交互次数。用法:Include(主关联表).ThenInclude(子关联表)。4、EF实体追踪和非追踪查询的区别?各自使用场景?答案:追踪查询(默认)查询出的实体会被上下文托管,能自动识别修改、新增、删除状态,可直接SaveChanges提交修改。但是会占用内存,查询速度稍慢。非追踪查询(AsNoTracking)查询的实体不加入上下文缓存,不做状态追踪,速度更快、内存占用更低。缺点是不能直接修改保存,需要手动Attach实体。场景区分:1、查询后需要修改、更新数据→默认追踪查询;2、纯展示数据、列表查询、导出数据→必须加AsNoTracking提升性能。三、EF查询与操作细节(实战高频)1、EF中First、FirstOrDefault、Single、SingleOrDefault的区别?答案:First:取第一条数据,无数据直接报错;FirstOrDefault:取第一条数据,无数据返回默认值(null),企业最常用;Single:查询有且仅有一条数据,多一条、少一条都报错;SingleOrDefault:有数据返回唯一数据,无数据返回null,多条数据直接报错。实战建议:日常根据主键查详情统一用FirstOrDefault,避免数据异常导致程序崩溃。2、EF为什么推荐用Any()判断是否存在,不用Count()>0?答案:底层SQL执行逻辑完全不同:1、Count()>0:数据库会遍历所有符合条件的数据,统计总条数,再做判断,数据量大时性能极差;2、Any():数据库找到第一条符合条件的数据就直接终止查询、返回结果,不会全表遍历,效率远高于Count。3、EF新增、修改、删除的两种写法区别?答案:新增DbSet.Add():单个实体新增;AddRange():批量新增,比循环Add性能高。删除1、先查后删:安全,能判断数据是否存在,但多一次查询数据库;2、直接Attach实体再Remove:无需查询,只需要主键,性能更高,适合确定数据存在的场景。修改1、追踪实体直接赋值:自动识别修改字段,安全稳妥;2、Entry.Update(实体):全字段更新,不管是否修改都会生成update语句,适合前端传参直接更新的场景。4、SaveChanges和SaveChangesAsync的区别?项目中怎么用?答案:1、SaveChanges:同步提交,会阻塞线程,等待数据库执行完成后才继续往下走;2、SaveChangesAsync:异步提交,不阻塞主线程,释放线程处理其他请求,提升接口并发能力。实战规范:现在.NETCore/.NET5+项目,全部统一用异步写法,查询、提交优先用ToListAsync、FirstOrDefaultAsync、SaveChangesAsync。四、EF事务与迁移(中级重点)1、EF自带事务机制是什么样的?手动事务怎么用?答案:默认机制:单次SaveChanges()是原子事务,要么全部成功,要么全部回滚,不用手动开启事务。手动事务场景:多次SaveChanges、多表跨操作需要保证数据一致性时,需要手动开启事务。用法:context.Database.BeginTransaction()开启事务,执行完操作后Commit(),异常时Rollback()回滚。2、什么是EF迁移(Migration)?作用是什么?答案:EF迁移是CodeFirst模式下的版本化数据库更新工具。作用:根据实体类的修改,自动生成升级、降级SQL脚本,实现数据库结构迭代更新,不用手动改表结构。核心命令:1、Add-Migration迁移名称:生成迁移文件,记录表结构变更;2、Update-Database:将迁移内容同步到真实数据库。优势:支持团队协作、版本回滚、线上无损更新,适配项目迭代开发。五、EF性能优化与坑点(高级面试核心)1、项目中EF常见的性能问题有哪些?怎么优化?答案:日常开发高频问题及优化方案:1、N+1查询问题优化:关闭不必要的懒加载,关联查询统一用Include/ThenInclude贪婪加载。2、查询不加分页、查询全部数据优化:列表查询必须结合Skip+Take分页,禁止ToList()全表查询。3、展示类查询开启实体追踪优化:所有列表、展示、导出查询添加AsNoTracking。4、循环单次SaveChanges优化:批量操作用AddRange/RemoveRange,循环结束后只调用一次SaveChanges。5、滥用Update全字段更新优化:追踪实体按需赋值,只更新修改字段,减少数据库日志压力。2、EF批量操作的痛点是什么?怎么解决批量更新、批量删除?答案:原生EF痛点:不支持真正的批量更新、批量删除。原生只能先查询、再修改、再保存,数据量大时性能极低,循环操作开销巨大。企业解决方案:1、使用EFCore扩展库(Zack.EFCore.Batch),支持无需查询直接批量删改;2、复杂批量操作、复杂联表查询,直接执行原生SQL(FromSql、ExecuteSqlInterpolated);3、超大数据量操作,舍弃EF,手写原生SQL保证性能。3、EF上下文怎么管理?为什么不能全局单例?答案:最佳实践:ASP.NETCore中默认Scoped生命周期,一次请求一个上下文实例,请求结束自动释放。禁止全局单例:1、单例上下文会一直缓存实体追踪数据,内存持续暴涨,造成内存泄漏;2、多请求并发时会出现实体状态混乱、数据错乱、事务异常;3、极易出现连接池耗尽、数据库连接超时问题。六、EF优缺点总结(面试收尾必答)1、EF框架的优点1、屏蔽底层SQL细节,开发效率极高,代码简洁易维护;2、强类型编码,编译期就能排查语法错误,减少线上BUG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年阜阳市交通能源投资集团有限公司子公司总经理社会公开招聘1名考试备考试题及答案解析
- 2026天津市东丽区消防救援局招录政府专职消防员50人笔试备考题库及答案解析
- 2026年文县教师招聘笔试备考题库及答案解析
- 2026年宿松县教师招聘笔试备考试题及答案解析
- 2026年富裕县教师招聘笔试备考试题及答案解析
- 宁波市水务环境集团股份有限公司招聘3人考试备考试题及答案解析
- 嘉兴平湖农商银行2026年度秋季招聘考试备考题库及答案解析
- 2026重庆市环卫集团有限公司招聘18人笔试参考题库及答案解析
- 2026交通银行交银施罗德基金管理社会招聘考试参考题库及答案解析
- 2026年宽城满族自治县教师招聘笔试参考题库及答案解析
- 2026植物工厂运营成本构成优化分析
- 教师个人政治思想工作总结(2篇)
- 西学中中医实践技能考试题及答案
- 2026年碳排放核算员职业理论考试题库(完整版)
- 2025年北京高中合格考政治(第一次)试题和答案
- 《计算机程序设计员》教学大纲-初中级
- GB/T 11918.2-2025工业用插头、固定式或移动式插座和器具输入插座第2部分:带插销和插套的电器附件的尺寸兼容性要求
- 冷冻消融术护理查房
- 危险品停车合同协议书
- 敖汉旗矿产资源总体规划(2021-2025)
- 500kV变压器保护及并联电抗器保护技术规范
评论
0/150
提交评论