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

Entity Framework Core 2.0 新特性

模型级过滤器将使用正确上下文实例中值,即执行查询那个。   使用  IgnoreQueryFilters() 方法在一次查询中禁用过滤器。...,一个控制器请求一个DbContext实例,首先会检查是否在DbContextPool存在该类型实例,一次请求结束后,任何状态DbContext实例都会被重置,且将自身加入到DbContextPool...FromSql和ExecuteSqlCommand方法加入参数化查询    在使用C#6.0特性构建SQL语句并使用FromSql和ExecuteSqlCommand方法执行SQL语句,会自动加入使用参数化查询...但是由于它不能被CLR类型识别,所以必须从另一个实体类型导航到它。包含定义导航实体是所有者。查询所有者,默认将包含所属类型。   ...需要在 DbContext 中定义一个静态方法并且使用 DbFunctionAttribute 特性。

1.9K50

Entity Framework Core 2.0 新特性

(本文英文原文地址:这里) 1.实体方面的新内容     1.1表拆分      现在可以将多个实体类型映射到将要共享主键列一个表,并且每一行将对应于两个或多个实体。    ...包含定义导航实体是所有者。查询所有者,默认情况下将包含所有类型。 按照惯例,将为所属类型创建一个影子主键,并通过使用表分割将其映射到与所有者相同表。...一旦请求处理完成,实例上任何状态都将重置,并且实例本身返回到池中。 这在思想概念上类似于ADO.NET中连接池运作方式,并且能节省DbContext实例初始化成本。...添加更多数据库方法),EF Core可以使用它们来定义映射到数据库函数或操作符方法,以便可以在LINQ查询中调用它们。..., "a%"); select c; 值得注意是,Like方法带有内存中实现,对内存中数据进行查询,或者在客户端需要发生相关内存查询,可以方便很多.

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

Entity Framework复杂类型属性映射

Code First发现不能推断出类主键,并且没有通过Data Annotations或Fluent API注册主键,那么该类型将被自动注册为复杂类型。...出现上述错误原因是我们没有初始化 Address 类,其中一个(后面我会讲解另一个解决方法)解决方法是在 new User(){} 内初始化 Address,修正后代码如下: using (var...Address = new Address() }; efDbContext.Users.Add(user); efDbContext.SaveChanges(); } 一、如何正确使用复杂类型...现在我们按照上面所述,对我们先前编写内容进行改造,这三条规则也是解决我们前面所遇到BUG另一个方法。...所谓原始值就是从数据库查询出来值,当前值就是实体目前值。入口点是 DbContextEntry方法,返回对象类型是 DbEntityEntry 。

66810

多线程下调用上下文 : CallContext

数据槽不在其他逻辑线程上调用上下文之间共享。 CallContext 沿执行代码路径往返传播并且由该路径中各个对象检查,可将对象添加到其中。...根据上图所示结果,基本可以得出以下两个结论: 1、GetData、SetData方法只能用于单线程环境,如果发生了线程切换,存储数据也会随之丢失。...可以知道,要在多线程环境下使用,我们需要用到另外两个方法:LogicalSetData 与 LogicalGetData。...But,鉴于目前广泛使用线程池前提,线程在处理一个请求之后,并没有被销毁,存储在CallContext中上下文对象也一直存在,如果是下一次拿出这个线程去处理另一个请求,这个上下文对象其实也在不断膨胀...而且,有时候一个线程并不一定是拿去处理请求了,如果是服务器拿去处理其他业务,那就可能引发一些其他问题。

89320

《ASP.ENT Core 与 RESTful API 开发实战》-- (第5章)-- 读书笔记(中)

第 5 章 使用 Entity Framework Core 5.3 重构仓储类 创建一个通用仓储接口 namespace Library.API.Services { public interface...= null; } } } 这里需要注意是,EF Core 对于查询执行采用延迟执行方法,只有遇到了实际需要结果操作,查询才会执行,这些操作包括以下几种类型: 对结果使用...for 或 foreach 循环 使用了 ToList()、ToArray() 和 ToDictionary() 等方法 使用了 Single()、Count()、Average、First() 和...BookForCreationDto, Book>(); CreateMap(); } } } CreateMap 方法两个泛型参数分别指明对象映射中源和目标...,从数据库中获取数据,实体类为源,而 DTO 为目标;处理请求相反 程序运行时,执行 AddAutoMapper 方法时会扫描指定程序集中 Profile 类派生类,并根据扫描结果生成映射规则

76910

如何运用领域驱动设计 - 工作单元

为什么每次都要去多写一个uow.GetXXXXX()。每使用一个仓储就要多写一次获取语句,我就不能好好使用仓储吗? 所以在这个想法强烈刺激下,我选取了另外实现方法。...EFTransactionFeature(DbContext)); } } 在每一次进行仓储操作时候,调用一个RegistUnitOfWork方法,来完成事务特征对象和工作单元流转工作...但是很快您就能发现问题:EFRepository是我们实现一个基类,以后所有的仓储操作继承该类来完成操作,那不是每扩展一个方法,我都要在该方法中写一句注册代码?如果我忘记写了怎么办。...所以我们得思考在每一个方法中,用户一定会写代码是什么,然后在该代码上下手。可能您已经想到了,DbContext!!!...(比如一个EF,一个ADO),它们之间如何依靠工作单元来完成事务 没有识别什么时候需要开启工作单元,如果一个操作仅仅需要获取数据,其实我们是不需要开启工作单元 不过如果您项目仅仅使用了一种ORM框架并且只需要开启一个工作单元

68320

ASP.NET Core配置(4):多样性配置来源

我们创建一个ASP.NET Core控制台程序来演示对这个DbConfigurationProvider应用,由于我们需要使用到Entity Framework 7,并且采用SQL Server数据库,...我们调用自定义扩展方法AddDatabase创建一个DbConfigurationProvider对象并将其注册到创建ConfigurationBuilder对象上。...我们在调用扩展方法AddDatabase时候指定了连接目标数据库,同时设置了一些初始配置项(如果确保配置项存在于目标数据库中,这个参数是不需要指定),它们提供了组成一个完整Profile对象基础数据...另一个ApplicationSettingsContext是对应DbContext类型。...进行设置,另一个可选参数用来指定一些需要自动初始化配置项。

72660

【半译】在ASP.NET Core中创建内部使用作用域服务Quartz.NET宿主服务

; // every day at noon QuartzJobRunner可以处理横切关注点 QuartzJobRunner处理正在执行IJob整个生命周期:它从容器中获取,执行并释放它(在释放范围...将这些方法移到QuartzJobRunner中应该可以减少IJob实现中重复代码,并且可以更容易地移到更正式管道和其他模式(如果您希望以后这样做的话)。...可替代解决方案 我喜欢本文中显示方法使用中间QuartzJobRunner类),主要有两个原因: 您其他IJob实现不需要任何有关创建作用域基础结构知识,只需完成标准构造函数注入即可 在IJobFactory...该QuartzJobRunner通过创建和处理作用域隐式地处理这个问题。 但是,此处显示方法并不是在工作中使用范围服务唯一方法。...马修·阿伯特(Matthew Abbot) 在这个文章中演示了一种方法,该方法旨在以正确处理运行后作业方式实现IJobFactory。

1.8K10

【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问

DbContextDbContext 是 EF Core 中表示数据库连接和模型类。每个 DbContext 实例都与一个数据库上下文关联,并且可以用于执行查询和修改数据库中数据。...catch (Exception) { // 如果有错误发生,则回滚事务 dbContextTransaction.Rollback(); } } 提交事务:所有操作成功完成...回滚事务:如果操作中发生错误,调用 Rollback() 方法回滚事务。 Tip: 每个 DbContext 实例都有自己事务上下文。...使用AsNoTracking:不需要跟踪实体状态,可以使用AsNoTracking方法提高性能。 批量操作:使用处理技术,比如批量插入、更新和删除,以减少数据库交互次数。...使用Find方法需要获取一个已知主键实体使用Find方法而不是FirstOrDefault或SingleOrDefault。

20300

C# 数据操作系列 - 9. EF Core 完结篇

两种方法支持传入一个取消令牌(这部分内容需要等后期《C# 异步编程系列》里介绍)。 返回一个Task,然后按照Task进行执行就行。...DbContext 也提供了Add/AddRange异步方法,但是这组方法异步版需要数据库支持,并不是一个通用方法,所以就没有提。...,也就是不用手动调用 Run方法。...而我们每次使用必须进行手动销毁。 如果我们在使用try/catch/finally进行捕获异常时候,需要在finally里放资源释放代码。如果资源得不到正确及时释放会出现更多问题。.../blogging1.db")) { // 使用 context } 以上实例代码中using含义是声明一个context作用于两个大括号之间,两个大括号之间代码执行完成后,会自动调用context.Dispose

1.1K10

Asp.Net Core 轻松学-经常使用异步你,可能需要看看这个文章

问题解决方案 3.1 问题分析 为什么会发生这种问题呢,原因就是因为使用了异步方法 async/await 没有值需要返回使用了 void 造成正确做法是如果没有返回值,则返回 Task...,如果有返回值,则使用 Task;一个异步方法内部没有返回 Task 时候,基于任务异步模式(TAP)并不知道异步任务状态, this.context.Update 执行完成后,发现挂载在内存中连接已经没有使用...,就执行了回收;实际上,此时程序还没有执行完成,但是 TAP 并不知道,所以它不会去阻止这个回收过程(使用标记),所以 async/await 应该成对出现,并且应该始终返回 Task 或者 Task...,以确保 TAP 能够将上下文进行正确挂载,否则,异常发生,TAP 无非将异常信息挂载到相应 Task 上,亦无法跟踪其执行状态等信息 3.2 解决方案 请牢记下面的铁律 3.2.1 在 EFCore...中,应当始终发挥 AutoDetectChangesEnabled 特性,不要再更新实体时候去调用 Update 方法 3.2.2 使用 async/await 修饰方法,应该始终返回 Task

69430

EntityFrameWork实现部分字段获取和修改(含源码)

= new baunitAccess(dbContext); //使用部分更新(不推荐,10000条数据,非常慢) List listModel...下面再介绍另一个实用功能,如果更新,我们能够动态记录类中哪些属性有变化,只将有变化属性作为待更新字即可,实现起来也不复杂。代码如下 ?   ...看调用代码中,下面这个变量就是存储哪些属性有值变化,是不是也很简单?!!!   ...原因:在数据量多时候,每次Update,都要在内存中循环找数据匹配,提交数据多时候,不推荐使用  推荐使用EF扩展类库,就是上面代码中第2种方案,这种方式是最接近Ado.Net方式 解决部分字段获取...  下面介绍几种方法,只返回部分字段,就是使用Linq语法中Select关键字   已知条件:创建一个SqlServer数据库(其他类型数据库均可),再创建ba_unit表,字段包括:UnitCode

97790

.NET Core开发实战(第35课:MediatR:让领域事件处理更加优雅)--学习笔记

35 | MediatR:让领域事件处理更加优雅 核心对象 IMediator INotification INotificationHandler 这两个与之前 Request 行为是不一样,接下来看一下代码...Send 方式来处理 Command,它还有一个方法 Publish,这个方法入参是一个 INotification 启动程序,输出如下: MyEventHandler执行:event01 MyEventHandlerV2...); } 这也就是为什么 IDomainEventHandler 会识别到 DomainEvent 并且进行处理,同样在定义 DomainEvent 时候,也需要标识它是一个 DomainEvent...Event 并且进行处理,这都是 MediatR 核心能力 领域事件都是定义在 event 目录下,与领域模型定义在一起,所有的领域事件继承 DomainEvent,分布于这个目录 领域事件处理...Handler 定义在 Application 应用层 Application 下面的 DomainEventHandlers 目录下面 这样好处是事件定义与事件处理是分开并且非常明确知道有哪些领域事件

86310

UnitOfWork知多少

UOW处理并发 而对于这些要点,EF中DBContext已经实现了。...EF中UOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体变化。调用SaveChanges,所有的更改将通过事务一次性提交到数据库。...同时,我们注意到Insert、Update、Delete方法显式调用了SaveChanges方法。 至此,我们完成了从实体到聚合再到仓储定义和实现,万事俱备,只欠Uow。 4.5....但这似乎引入了另外一个问题,因为仓储是管理单一聚合,每次做增删改时显式提交了更改(调用了SaveChanges),在处理多个聚合时,就无法利用DbContext进行批量提交了。那该如何是好?...就是整个调用链上需要注入同类型对象,使用是同一个类型实例。 4.7.

2.3K81

生成数据库

EFCore使用一个DbContext和数据库打交道,它代表着和数据库之间一个Session,可以用来查询和保存我们entities。...DbContext需要一个Provider,以便能访问数据库(这里我们就用LocalDB吧)。 我们就建立一个DbContext吧(大一点项目会使用多个DbContext)。...AddDbContext另一个overload方法,它可以带一个参数,在里面调用UseSqlServer。...如果项目里面有很多entity,那么所有的fluent api配置需要写在OnModelCreating这个方法里,那太多了。...里面有Up方法,就是从当前版本升级到下一个版本;还有Down方法,就是从下一个版本再退回到当前版本。 我们也可以不使用 Add-Migration命令,手写上面这些代码也行,我感觉还是算了吧。

98820

从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

EFCore使用一个DbContext和数据库打交道,它代表着和数据库之间一个Session,可以用来查询和保存我们entities。...DbContext需要一个Provider,以便能访问数据库(这里我们就用LocalDB吧)。 我们就建立一个DbContext吧(大一点项目会使用多个DbContext)。...AddDbContext另一个overload方法,它可以带一个参数,在里面调用UseSqlServer。...里面有两个文件,一个是Snapshot,它是目前entity状态: namespace CoreBackend.Api.Migrations { [DbContext(typeof(MyContext...里面有Up方法,就是从当前版本升级到下一个版本;还有Down方法,就是从下一个版本再退回到当前版本。 我们也可以不使用 Add-Migration命令,手写上面这些代码也行,我感觉还是算了吧。

2.2K70

DDD理论学习系列(12)-- 仓储

工厂生产了一批货物,只需交给仓库管理员即可,他负责货物堆放;需要发货时候,仓库管理员负责从仓库中捡货进行货物出库处理需要库存盘点,仓库管理员负责核实货物状态和库存。...然而对复杂领域模型进行建模,仓储是模型扩展,它表明聚合检索意图,可以对领域模型进行有意义读写,而不是一个技术框架。 也有很多人认为仓储是一种反模式,因为其隐藏了基础持久化框架功能。...公司接到一笔订单做发货处理,销售员将发货通知单告知仓库管理员,仓库管理员再分配ORM机器人进行捡货。很显然,ORM机器人必须能够识别发货通知单,将发货通知单中商品对应到仓库中存储货物。...为了真正了解如何使用这些方法,开发人员需要跟踪相关调用堆栈,才能知悉方法意图,更别说出现性能问题如何着手优化了。...如果您有一个关系数据库并且正在使用ORM作为数据模型,那么您可能能够延迟加载一些领域对象属性,这样就可以推迟加载不需要聚合部分。

1.9K70
领券