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

03-EF Core笔记之查询数据

预先加载 使用Include方法指定要包含在查询结果关联数据。...() .UseSqlServer(myConnectionString)); EF Core 延迟加载需要属性必须具有是共有的,且具有virtual修饰符,只有这样才可以被子类重写。...EF Core还提供了不使用代理方式进行延迟加载,此方法需要向实体类中注入ILazyLoader实例,并通过该实例实现get访问: public class Blog { private ICollection...好一点是,EF Core在设计时就替我们考虑了如何防御SQL注入攻击,因此当我们使用FromSql方法时,参数如果有使用到拼接字符串情况,则会自动为我们生成SQL查询参数,例如: var user...在执行查询时,EF Core会检查我们sql语句是否支持拼接,如果支持情况下,则会将linq过滤语句拼接为sql一并发送到数据库进行查询。 跟踪 原始SQL跟踪与Linq查询跟踪方式一致。

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Entity Framework 一些性能建议

    执行时机是用到这个表达式结果时候才去执行。 在公司码程序时候,我看到好多同事用EF,写完查询喜欢直接调用ToList()方法。有时候这会造成很大性能问题。.... // 建立查询,但不执行 var result = query.ToList(); // 立即执行查询 所以,你应当尽量避免从ToList()后结果再去查找自己想要元素。 ?...很显然,它会被系统其他方法调用,而这些调用者希望得到结果都各不相同。...紧跟其后“.Posts”是Category对象导航属性,EF会用lazy load去加载这个category所有的post,所以就生成了第二条SQL语句。...所以,在EF,要进行Count操作,应该这样写: context.Post.Count(p => p.Categories.Any(q => q.Name == categoryName)); 这时,

    1.7K30

    .NET面试题系列 - LINQ to SQL与IQueryable

    { get; set; } public string Sex { get; set; } } 由于VS版本是逆天2010,且没有EF,我采用了比较原始方法,即建立一个mdf...大家可以使用EF或其他方式。...方法,它目的在于呼叫其配套providerExecute方法,从而令我们自己逻辑得以执行(我们已经在构造函数传入了自己provider): public IEnumerator...一个查询进行执行,就是开始遍历IQueryable过程,其会调用Execute方法并传递表达式树。 不是所有的表达式树都可以翻译成SQL。例如ToUpper就不行。...将程序员从对SQL语句拼接(尤其是insert)解放出来,它既容易错,又很难发现错误。现在插入对象都是强类型,就犹如插入一个List一样。

    1.7K10

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

    10.除了EF,列举出你知道ORM框架? 11.在哪些类型额项目中你会选择EF? 为什么? 12.请说明EF映射实体对象几种状态? 1.EF(Entity Framework)是什么?...提升从数据库拿数据速度,可以参考以下几种方法: 1).在数据库定义合适索引和键 2).只获得你需要列(使用ViewModel或者改进查询)和行(使用IQueryable)...Enumerable这个静态类型含有很多扩展方法,其扩展目标是IEnumerable。 实现了这个接口类可以使用Foreach关键字进行迭代(迭代意思是对于一个集合,可以逐一取出元素并遍历之)。...实现这个接口必须实现方法GetEnumerator。 ---->详解 6.IEnumerable缺点有哪些? IEnumerable功能有限,不能插入和删除。...大部分LINQ语句是在最终结果第一个元素被访问时候(即在foreach调用MoveNext方法)才真正开始运算,这个特点称为延迟执行。

    4.1K30

    如何处理EF Core多对多关系?

    多对多关系不像其他关系那么简单,在这篇文章,我将向您展示如何创建多对多关系以及如何在 EF Core 中使用它们。 模型 多对多简单而实用例子可能是某种数字电子商务商店。...在本文发表时,EF Core 无法处理这种情况。...目前,创建复合键唯一方法是在OnModelCreating. protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating...插入多对多 假设我们已经有Cart和Item在我们数据库,现在我们想将特定商品(Item)添加到特定购物车(Cart),为了做到这一点,我们需要创建新CartItem并保存它。...// 获取关联所有商品指定购物车 var cartIncludingItems = db.Carts.Include(cart => cart.Items).ThenInclude(row => row.Item

    3K20

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

    当然如果数据来自远端,你还可以选择IQueryable,它不会把资料一股脑拉下来,而是做完所有的筛选之后,才ToList,把资料从远端下载下来。...在EF6,我们还可以使用这样方法: ? 注意:编译器不一定能够将你LINQ语句翻译为SQL,例如字符串IndexOf方法就不被支持。...XML等,EF没有对应功能 你项目对性能要求达到了非常苛刻程度,导致EF一些性能可以接受方法在你这里变成了不能接受。...例如EF使用了反射,但如果你ORM只用于你开发软件,所有的情况你都可以事先预计,那你也可以不用反射 而大部分ORM开发出来目标仅仅是: 令查询语法更加接近SQL 加入了若干语法糖或代码生成快捷方式...使用Reshaper等工具,它可能会在你写出较差代码时给出提醒。 上MSDN,nuget查询是否已经有了现成方法(例如获得最后一个元素)。 撰写单元测试来保证你优化正确性。

    2.6K40

    C#内建接口:IQueryable

    这节来讲一下C#内建接口:IQueryableIQueryable是 IEnumerable 接口子接口,相比之下提供了更丰富查询功能。...在 C# ,常用查询提供者是 Entity Framework(EF),它可以将 IQueryable 查询转换为适当 SQL 查询语句,并与数据库进行交互以获取结果。...可组合性:IQueryable 查询具有良好可组合性,我们可以根据需要在查询添加和组合多个查询操作。这使得我们可以根据不同条件动态构建查询,以及重复使用和组合查询逻辑。...我们首先创建了一个整数数组 numbers,然后通过 AsQueryable() 方法将其转换为 IQueryable 对象,针对这个查询对象,我们用 Where 方法筛选出偶数,再使用 Select...接下来,我们修改了 numbers 数组一个元素,将索引为 2 元素由 3 修改为 6。 最后,我们通过 foreach 循环遍历查询结果,并将结果打印到控制台上。

    29110

    Repository个人实践

    泛型IRepository接口用来规范所有仓储都应该具有的基础增删查改方法,这里有2点需要注意: 1)方法返回类型为IQueryable,目的是延迟查询,用过类似EFORM应该都知道; 2)接口有个泛型参数...接下来,再看EF基础实现Repository实现,如下: public abstract class Repository : IRepository...,那就涉及到简单CUD保存,尤其是像基于EF这种实现,还他妈必须savechanges才行。。。...,你就应该想到,抽象目的,是为了切换ORM准备,假如我想切换为Chloe实现,那么很简单,改动只需要3处: 1)startupEFDBContext注册改为Chole Context注册,...MsSqlContext; 2)ChloeUnityOfWork实现IUnitOfWork,构造函数传入IDbContext,下面的方法实现切换为MsSQLContext相关事务操作; 3)Repository

    1K20

    C#规范整理·集合和Linq

    缺点是:向集合插入元素将会变得低效,它需要给插入元素腾出位置并顺序移动后面的元素。...线性表不能按照索引进行查找,它是通过对地址引用来搜索元素,为了找到某个元素,它必须遍历所有元素,直到找到对应元素为止。所以,线性表优点是插入和删除数据效率高,缺点是查找效率相对来说低一些。...当我们觉得在集合插入和删除数据很慢时,就可以考虑使用链表。...双向链表每个节点都向前指向Previous节点,向后指向Next节点。 在FCL,非线性集合实现得不多。非线性集合分为层次集合和组集合。层次集合(树)在FCL没有实现。...所有的集合类也没有一个可写迭代器属性。 原因有二 这违背了设计模式开闭原则。被设置到集合迭代器可能会直接导致集合行为发生异常或变动。

    20530

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

    主要集中增删该查每个模块都有,所以本次是为封装相同接口方法    如果你想了解怎么重构普通接口DAL层请查看第二节点    如果你只想了解利用T4链接EF生成代码,可以忽略前两节,之后跳后最后T4模版使用...在编译时,各个部分都必须可用来形成最终类型。各个部分必须具有相同可访问性, public、private 等。 如果将任意部分声明为抽象,则整个类型都被视为抽象。...各个部分可以指定不同基接口,最终类型将实现所有分部声明所列出全部接口。在某一分部定义声明任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时组合。...代码生成策略 改变生成策略为T4 添加TT模版 重构DAL层 创建ICommonRepository接口 实现ICommonRepository方法 T4模版使用 1.改变EF代码生成策略旧...在WriteHeder方法后都是通用访问代码。我们提取之后代码。因为安装了T4高亮。

    1.9K60

    浅析Entity Framework Core2.0日志记录与动态查询条件

    在Entity Framework Core2.0  估计是为了配合ASP.NET Core日志.所以对这些接口进行了更进一步包装,也弃用了一些接口和类,:IRelationalCommandBuilderFactory...,DbCommandLogData 但是Entity Framework Core2.0 在DbContextOptionsBuilder添加了新扩展方法.UseLoggerFactory 看到LoggerFactory...这里作为例子,只将日志记录在了调试窗口..当然也可以记录在自己文件..具体请参考LoggerFactory相关说明.....我们使用EF Core,所以需要引用它 Microsoft.EntityFrameworkCore.DynamicLinq 这个库. 这个库针对IQueryable进行了动态条件扩展.....我们发现,这个库还是很强大.. 因为它是对IQueryable进行扩展,所以没有数据库不支持情况..只要有相关驱动,就可以基于驱动来生成相关SQL代码..

    1.5K60

    【源码解读(二)】EFCORE源码解读之查询都做了什么以及如何自定义批量插入

    服务,调用了InitializeSets方法,顾名思义,这个方法其实就是去加载我们DBSet,以下是这个接口实现,从下面的源码,我们不难看出,这里就是通过IDbSetFinder去查找DBContext...里面去了,这样就创建了DBContext里面的所有的DbSetSet方法,,但是呢这里是只给构建了DBSetSet方法,但是还没有调用,相当于此时DBSet还是null,所以还要继续看DbSetInitializer...IAsyncQueryProvider实现,按照我们上面的代码来看,实际上最终返回是EntityQueryable一个类型,在上一文章,我们实现过自定义IQueryable一个类型,最终自定义实现这个...如何自定义批量增删改查替换自带     在以前记得使用批量插入时候,总觉得EF自带很慢,3.1时候用,到现在都这么久了,不知道提升性能了没得,不过它内部依旧和我写例子 原理差不多,内部开启一个事物...,有时候也不知道怎么讲,因为它不像asp.net core有序,所以导致讲时候不知道怎么讲,后续,会继续出关于对EFCORE源码讲解,可能有的地方依旧会讲得多一点,有的会提供一个大概类,或者方法名称

    36050

    如何运用领域驱动设计 - 存储库

    思考一下,您现有的应用是否包含了一个全能ORM框架(比如EF),那您引入仓储原因是什么呢? 什么是存储库 好吧,这次开篇太长了,终于回到了正题:什么是存储库?...通过一个众所周知接口来提供访问。提供添加和删除对象方法,用这些方法来封装在数据存储实际插入或删除数据操作。...); 这样做好处是所有的存储库都可以复用这个接口,以后所有的查询都可以通过使用该方来来完成,而不需要再去单独写各种Find方法。...而现在,您可能正在这样做,开放且灵活约定,再加上延迟IQueryable对象,让仓储层完全丧失了原有的作用,它反而成了负担,为什么不直接使用DbContext对象呢?...要么就是将存储库规则打破,直接查询利用EF Core查询出IQueryable集合对象,然后一顿输出猛虎来达到效果。

    98030

    EF Core增删改查

    0.前言 到目前为止,我们看了一下如何声明EF Core初步使用,也整体看了下EF Core映射关系配置以及导航属性配置。 这一篇,我带大家分享一下,我在工作需要EF Core用法。...如果在不考虑后续变更或者上下文复用性,可以直接在自定义Context里重写OnConfiguring方法定义。...而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端外键是可空类型,并不会删除导航属性另一端元素只会设置外键指向为NULL,如果另一端外键是不可空,那么就会同时删除。...).Where(t=>true).OrderBy(t=>t.Id); 分页只能通过方法形式进行分页,这里提供一个分页工具方法: public static IQueryable Paging...EF Core在调用 ToList时候,会将已调用方法和Linq转换成SQL语句,并正式向数据库发起查询。如果出现了在Linq调用三方方法或者自己写工具方法的话,可能会提示不受支持。

    3.2K20

    在VS调试LINQ(Lambda)

    对于Linq to object,当集合对象是 IEnumerable 时,对单个对象进行迭代方式是:先把单个对象走完所有的Linq方法后,直到最后或者执行到返回值不是IEnumerableLinq...右键单击其中一个lambda语句(方法体)内任意位置,然后选择“断点 - >插入断点”。断点就打在这个lambda表达式上了。...参考 如何在C#调试LINQ查询:https://michaelscodingspot.com/debug-linq-in-csharp/ C#条件断点:https://www.c-sharpcorner.com...使用OzCode VS插件OzCode很强大,每一个Linq语句执行结果都能统计并展示出来,详情参考:如何在C#调试LINQ查询 和 如何在C#调试LINQ查询 使用LinqPad LinqPad...软件很强大,不过数据源是个问题,操作步骤参考:如何在C#调试LINQ查询 和 如何在C#调试LINQ查询 参考 2017年调试LINQ:LINQPad与OzCode:https://oz-code.com

    4.7K30
    领券