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

EF 相见恨晚的Attach方法

一个偶然的机会,让我注意了EF 的Attach方法,于是深入了解让我大吃一惊 我所参与的项目中所有的更新操作与删除操作都是把原对象加载出来后,再做处理,然后再保存到数据库,这样的操作不缺点在于每一次的操作都要对数据库进行两次操作...,性能上有很大的问题, 于是Attach方法出场 介绍Attach方法前先介绍与它相关的知识点   Attach方法:将给定实体以 System.Data.EntityState.Unchanged...状态附加到上下文中 从解释可以看出Attach方法主要目的就是把一个没有被dbContext跟踪的对象附加到dbCotext中使其被dbContext跟踪  1   对象上下文:DBContext 建一个新的上下文实例以创建将连接到的数据库的名称...,默认状态是没有对任何对象跟踪的  2   实体状态:  EF对实体状会有4种状态:       2.1  Added:对象为新对象,并且已添加到对象上下文,但尚未调用    2.2  Deleted...创建实体之后、但将其添加到对象上下文之前,该实体处于此状态   2.4 Modified:对象上的一个标量属性已更改,但尚未调用    2.5 Unchanged: 此对象尚未经过修改自对象附加到上下文中后

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

EF】DbFirst实现增删改查

1.VS中新建控制台应用程序 2.右击刚刚建好的程序,添加“ADO.NET实体数据模型” 3.选择“来自数据库的EF设计器” 4.依次连接服务器和数据库 5.选择包括敏感数据 6.选择实体框架...这样database first的实现已经基本上完成了,如果想要用ModelFirst的方式,第3步选择”空EF设计器模型“,edmx文件自己添加数据表即可。接下来通过代码来实现对数据库的操作。...#region 添加实体 category ca = new category(); ca.name = "教育新闻"; //dbContext...指向的数据的Category表添加一条数据ca dbContext.category.Add(ca); //保存到数据库 dbContext.SaveChanges...(); #endregion 2.修改、删除实体 //修改此实体 //1.将当前实体附加到上下文来进行管理

69910

Repository个人实践

为此,专门查阅了博客园几个大神 关于Repository的实践,到最后都感觉依然莫衷一是,于是感觉这玩意儿不能深究,自己还是紧扣Martin老爷子关于Repository及UoW的核心定义,自己实践核心概念就是了...泛型IRepository接口用来规范所有仓储都应该具有的基础增删查改方法,这里有2点需要注意: 1)方法返回类型为IQueryable,目的是延迟查询,用过类似EF的ORM的应该都知道; 2)接口有个泛型参数...这已经足够实现Martin老爷子关于UoW的核心概念了。 之后,我们看看IRepository、IUoW的基于EF的实现: ?...>(provider => provider.GetService()); 上述操作是Startup完成的。...注意,这一步比较重要,因为它直接决定了你EFUnityOfWork是否能接收到DBContext,不这样做,你就得EFUnityOfWork中直接接受XXDBContext了,那还谈何抽象,还谈何基础架构

96720

Entity Framework 4.1 Code-First 学习笔记

EF特性,将它们添加到上下文(上下文需要派生自DbContext时,会自动生成相应的数据表。...鉴于性能问题,EF4.1还支持一种延迟加载的数据加载方式,默认情况下,延迟加载是被支持的,如果你希望禁用它,必须显式声明,最好的位置是 DbContext 的构造器: public MyDomainContext...DbContext.Database.SqlQuery:这个方法将返回的数据集映射到相应的对象,而不去管这个对象是不是实体。重要的是 EF 不会跟踪返回的对象,即使他们是真正的实体对象。   ...DbSet.SqlQuery:这个方法返回的实体将会被 EF 跟踪修改,所以,如果你在这些返回的实体上做了修改,当 DbContext.SaveChanges 被调用的时候,将会被处理。...另外一个 EF 映射管理的方法是使用 Entity SQL,这种方式是 EF 将实体模型转换为物理模型,然后将Linq查询添加到物理模型,最后将物理模型转换为数据库存储的查询。

1.6K10

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

它提供了 Code First 开发方法,允许开发人员通过代码来定义模型、配置映射关系和创建数据库。此外,EF Core 还支持数据迁移,使得开发过程数据库模式的变更更加容易管理和部署。... OnModelCreating 方法,我们配置了 Blog 实体的主键。...EF Core 通过提供事务上下文支持数据库事务。 事务 EF Core 的使用涉及以下步骤: 开始事务: DbContext 实例开启一个事务。...事务仅适用于同一 DbContext 实例执行的操作。 事务嵌套在 EF Core 不受支持。...如果你需要在同一个 DbContext 实例访问多个数据库,你可以通过 DbContext添加多个 DbSet 属性来实现这一点。每个 DbSet 属性对应一个数据库的表。

17600

EF+MySQL乐观锁控制电商并发下单扣减库存,高并发下的问题

我们采用的是预扣库存的方式,预扣库存的时候,SalesInfo表,将最大可售数量MaxSalesNum减去购买数量,用一条SQL语句来表示这个业务,就是下面这个样子的: update salesinfo...初试:EF手工版乐观锁 我们用的EF(Entity Framework)+MySQL,很不幸, EF 没法直接实现这个效果,它的DbContext数据上下文决定了要完成这种情况下的修改,得先查询到指定的数据到...这里采用商品表的 ModifiedTime 字段来表示自上一次查询以后,看本次修改的时候有没有另外一个人先修改了,所以这里用 ModifiedTime 作修改的附加条件,相当于是一个“乐观锁”。...但是,经过简单压力测试,上面这个程序会出现“超买”,没有控制到并发修改库存的问题,于是尝试用“EF乐观锁”来解决这个扣减库存的问题, 进阶:EF乐观锁 参考了2篇文章《EFMySQL对记录的乐观并发控制...PS:虽然解决了本文的问题,但是EF这种并发处理方案,代码编写上还是略显麻烦,是否使用ESQL或者其它ORM框架,看你的偏好了。

2.5K80

【源码解读(一)】EFCORE源码解读之创建DBContext查询拦截

在下面的代码,刚开始判断了如果DBContext的生命周期是单例,要将Option的生命周期也设置为单例,如果不设置为单例,就会出现错误,这个错误之前讲解IOC的文章,我记得也提到过,接下来判断设置...哈哈,不用猜,大家也知道,肯定是注入服务,通过options的Extensions附加一些其他关于EF的功能,并且将他们所需要的服务注入到传入的ServiceCollection里面,其他的都是一样,所以我们没有托管...,Ef也会注入一遍,重复注入,Program.cs里面我们先注入一个返回IServiceCollection的Func,这样DBContext可以获取到这个 传到ServiceExtension里面...的核心在于表达式树,可以说表达式树构造了整个EF核心,关于表达式树,我我的第一篇博客就写了很多关于表达式树的案例,https://www.cnblogs.com/1996-Chinese-Chen/...,我们一共讲了AddDbContext做了什么,DBContext的构造函数又做了那些事情,写了不托管EF的ioc到WEB的ioc的场景下如果注入服务到EF的ioc,以及如何拦截增删改查的方式,提升查询性能的方式

41220

多线程下的调用上下文 : CallContext

.NET Framework,Microsoft给我们设计了一个CallContext类。...Web环境下等于System.Web.HttpContext.Current 2 探究CallContext方法 上面介绍了CallContext提供的核心方法,下面我们就来通过实践来理解一下。...data.Value : null; } 4 EF DbContext场景 对于像UnitOfWork这种操作模式,是比较适合于CallContext发挥的地方,让EF DbContext在线程上下文内保持唯一...注意:这里提到的EF均指EF 而非 EF Core。...But,鉴于目前广泛使用线程池的前提,线程处理完一个请求之后,并没有被销毁,存储CallContext的上下文对象也一直存在,如果是下一次拿出这个线程去处理另一个请求,这个上下文对象其实也不断的膨胀

88020

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

什么是工作单元 按照国际管理呢,这一章节都是解读有关原著《领域驱动设计:软件核心复杂性应对之道》 的解释。但是!!!有关工作单元的概念在书里并没有被明确的提及到。...实现思路 找出当前数据库持久组件具有事务特征的对象(比如在EF中就是DbContext) 创建一个容器去容纳这些对象 工作单元就是该容器的实现,它掌管了这些事务对象,并对外公布了提交事务的方法 工作单元管理器负责了对工作单元的创建工作...那么怎么才能避免用户每一次都要去显示调用注册呢,而是让用户不知不觉中就完成了该操作。所以我们得思考每一个方法,用户都一定会写的代码是什么,然后该代码上下手。...efFeature.IsOpenTransaction; } } dbContext.Database.BeginTransaction是EF为我们提供的手动开启事务的方法。...AspNet Core为我们提供了很好的拦截方法。第一种方法: 我们可以中间件完成,因为所有的请求都要穿过中间件,我们可以方法到API之前就开启事务,等API访问结束后就提交事务。

67820

Entity Framework Core 2.0 新特性

模型级过滤器将使用正确的上下文实例的值,即执行查询的那个。   使用  IgnoreQueryFilters() 方法一次查询禁用过滤器。... ef core 2.0 ,我们将自定义的DbContext类型注册到DbContextPool服务,可让该数据库上下文类型的实例重复使用。...需要在 DbContext 定义一个静态方法,并且使用 DbFunctionAttribute 特性。...一旦注册了方法,您就可以查询的任何地方使用它。  要注意的几件事: 按照惯例,在生成SQL时,该方法的名称用作函数的名称(本例是用户定义的函数),但可以方法注册期间重写名称和schema。...,EF Core2.0,这个特性回来了(EF Core 之前的 core版本不支持)。

1.9K50

EF 数据库连接约定(Connection String Conventions in Code First)

一个典型的EF应用大多数情况下是一个DbContext的派生类(derived class)来控制,通常可以使用该派生类调用DbContext的构造函数,来控制以下的东西: (1)、上下文如何连接到数据库...EF应用没有做任何的配置.且在你自定义的数据库上下文类没有调用DbContext带参的构造函数,那么当前应用对应的数据库上下文类,将会调用DbContext的默认无参的构造函数(EF默认规定的数据库连接...注:VS2010默认安装SQL Express,VS2012默认安装LocalDb,安装过程,EF NuGet包会检查哪个数据库服务(前面介绍的)可用,当EF创建默认连接的时候,当EF创建默认链接的时候...,表示你应用程序已经进行了配置,这一点要区分上面的方法. (1)、有Ado.Net使用经历的都知道,一般情况下,数据库连接字符串一般定义app.config/web.config配置文件,例如:...三、还有其他两种方法,不常用 1、You can use an existing DbConnection object by passing it to a DbContext constructor

1.4K90

解决因C#8.0的语言特性导致EFCore实体类型映射的错误

今天下午排查一个EF问题时,遇到了个很隐蔽的坑,特此记录。...于是开始排查:手动创建一个空程序集,引用EFCore,从原项目拷贝EF设计时库、DbContext和各实体类,一顿操作后竟然发现在新的程序集中生成的迁移文件是符合预期的。...令人费解,多次比对代码之后,发现是.csproj文件的这一行配置导致的 enable 原因分析 C# 8 引入了一项名为可为 null 引用类型 (NRT)...语法来表明的》,实体string类型的属性C#作为引用类型,自然而然地受到了这个影响。 果然,删除了这个功能后,string?...的语法将不起作用 解决 关闭此功能,重新生成迁移,更新数据库,问题解决。

19620

Entity Framework Core 简介

今天来讲解一下 .NET 的重要成员 Entity Framework Core。...零、EF Core 开发方法 EF Core 只支持两种开发方式 Code First 和 Database First, EF Core 2.0 开始不支持数据库模型的可视化设计器以及数据库设计导航... Code First 方法EF Core API 使用基于 domain classes 中提供的约定和配置的迁移来创建数据库和表,这种方法 DDD 很有用。...如果你习惯于 Database First ,那么你可以使用 EF Core 命令基于现有的数据库创建 domain classes 和上下文类,但是这种方法支持有限,因为 EF Core 2+ 版本...一、EF Core 与 EF6 这里列一下 EF Core 目前所具有的 EF6 的功能 DbContext ; DbSet ; Data Model ; 使用Linq-to-Entities查询 ;

1.9K10

.NET Core开发实战(第28课:工作单元模式(UnitOfWork):管理好你的事务)--学习笔记

工作单元模式(UnitOfWork):管理好你的事务 工作单元模式有如下几个特性: 1、使用同一上下文 2、跟踪实体的状态 3、保障事务一致性 我们对实体的操作,最终的状态都是应该如实保存到我们的存储,...CommitTransactionAsync(IDbContextTransaction transaction); // 事务回滚 void RollbackTransaction(); } 实现上我们是借助...EF 来实现工作单元模式的 看一下 EFContext 的定义 /// /// DbContextEF 的基类,然后实现了 UnitOfWork 的接口和事务的接口 ///...//await _mediator.DispatchDomainEventsAsync(this); return true; } //// 可以看到这个方法实际上与上面的方法是相同的...request); throw; } } } 回过头来看一下我们的 EFContext,EFContext 实现 IUnitOfWork,工作单元模式的核心

2.7K20

Entity Framework Core 2.0 新特性

使用所属类型与EF6使用复杂类型类似,(PS:这里解释一下EF6的复杂类型,复杂类型是允许实体组织标量属性的实体类型的非标量属性。像实体一样,复杂类型由标量属性或其他复杂类型属性组成。)...(本例为用户定义的函数),但在方法注册期间可以覆盖名称和模式 目前只支持标量功能 必须自行在数据库创建映射函数,EF Core迁移不会对其进行创建 2.性能提升方面 2.1DbContext连接池...ASP.NET Core程序我们使用EF Core一般都是将自定义DbContext类型注册到依赖注入系统,然后通过控制器的构造函数参数获取该类型的实例。...这意味着为每个请求创建一个新的DbContext实例。 所以版本2.0,我们引入了一种依赖注入中注册自定义DbContext类型的新方式,它透明地引入了一个可重用的DbContext实例池。...() 添加了EF.Functions属性(注意,这里应该是可以扩展的,添加更多的数据库方法),EF Core可以使用它们来定义映射到数据库函数或操作符的方法,以便可以LINQ查询调用它们。

3.8K90

EF大数据批量处理----BulkInsert

这些扩展方法在哪里找 批量添加和EF本身自带的添加性能提高了多少 为什么扩展方法用的时间这么少 ---- 之前做项目的时候,做出来的系统的性能不太好,框架中使用了EntityFramework...---- VS中新建EF之后,右键解决方案下的引用, 选择管理NuGet程序包,搜索Z.EntityFramework.Extensions并安装。 ? 然后类里面添加引用之后就可以直接点出来。...将上面的添加到数据库的代码换成下面的代码: dbcontext.BulkInsert(customers); dbcontext.BulkSaveChanges(); 直接上10W条: ?...比上面的方法添加1000条的数据用的时间差不多,看来EF自带的添加方法慢,是毋庸置疑的了。 ---- 为什么扩展方法用的时间这么少?...源代码下载:EF扩展方法BulkInsert(批量添加) 参考博客链接 EF架构~数据分批批量提交 EntityFramework 中支持 BulkInsert 扩展 批量操作可显著提升Entity

1.1K30
领券