在介绍Entity Framework的修改实体到数据库的方法之前呢,我们先简要的介绍一下ObjectContext的处理机制。...1、ObjectContext的处理机制 ObjectContext是Entity Framework封装了数据库访问的上下文,以及实体的映射关系元数据信息等。EF帮我们封装好了这么一个统一的接口。...总结: EF是通过针对开发人员对实体做的修改,直接维护ObjectContext的实例中的实体操作集合并对单个实体对应的状态进行修改。...所以,我们在对应多个ObjectContext实例进行操作时要注意,调用实例自己的SaveChanges()方法时,它只会对自己实例内存空间的操作映射回数据库,而其他ObjectContext实例中的实体集合的修改都不受影响...不推荐方式一: 思路:先从ObjectContext取出实体,然后将前台传过来的DTO属性对应赋值到我们的实体上,然后调用ObjectContext的保证修改方法。
如下图所示的EDMX的定义: EF中操作数据库的网关 ObjectContext封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。...ObjectContext 类为主类,用于与作为对象(这些对象为 EDM 中定义的实体类型的实例)的数据进行交互。...它封装了EF 到数据库的连接,封装了表对应的实体的集合,所以我们所有的操作都应该是针对于ObjectContext下的实体集合,修改实体集合后,通过调用ObjectContext的SaveChange方法将对实体集合的操作映射回数据库...当然ObjectContext通过我们上面EDMX的定义,也就是表、实体的关系的xml定义,通过集合的变化,生成对应的sql,并调用Ado.Net来实现对数据库的操作。
9 public IQueryable GetUserinfo() 10 { 11 return this.ObjectContext.userinfo...= EntityState.Detached)) 17 { 18 this.ObjectContext.ObjectStateManager.ChangeObjectState...= EntityState.Detached)) 37 { 38 this.ObjectContext.ObjectStateManager.ChangeObjectState...EntityState.Deleted); 39 } 40 else 41 { 42 this.ObjectContext.userinfo.Attach...(userinfo); 43 this.ObjectContext.userinfo.DeleteObject(userinfo); 44 } 45
ObjectContext本身是有缓存的,整个Request内都是一个ObjectContext,ObjectContext一级缓存能力进一步利用。...下面我们来实现Unity集成ADO.NET Entity Framework的工作: 1、利用Unity的依赖注入,ObjectContext会给我们生成3个构造函数,类似于下面的代码: // Original... /// public partial class AdventureWorksLTEntities : global::System.Data.Objects.ObjectContext...ObjectContext有多个构造函数,而且ObjectContext的构造函数代码是Visual Studio 代码生成的,最好的选择是使用配置文件或者使用配置API指定注入时使用的构造函数。...使用RequestControlledLifetimeManager实现ObjectContext的生命周期管理。
WarmupEntityFramework() { // EF暖机操作 using (var db = new MyAppDBContext()) { var objectContext...= ((IObjectContextAdapter)db).ObjectContext; var mappingCollection = (System.Data.Entity.Core.Mapping.StorageMappingItemCollection...)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace...// EF暖机操作 using (var db = new MyAppDBContext()) { var objectContext...)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace
ObjectContext 对象 可以使用 ObjectContext 对象提交或撤消由 ASP 脚本初始化的事务。
不推荐方式一: 思路:先从ObjectContext取出实体,然后将前台传过来的DTO属性对应赋值到我们的实体上,然后调用ObjectContext的保证修改方法。...因为我们知道EF通过ObjectStateManage来控制添加、修改、删除队列以及实体的状态,我们所有可以通过在直接将DTO转化成实体,然后将实体对应的队列中,并 且我们手动的将实体的状态处理好,再调用ObjectContext
在实体设计窗口中,右击→属性→代码生成策略=>无 ,这一步就是去掉EF自动代码生成实体类以及EF数据访问上下文网关ObjectContext等。...代码如下: Car类 代码如下: 第五步:定义自己的数据库访问实体上下文 ObjectContext【它是封装了访问数据库的网管,所有的增删查改都通过此接口对数据库进行操作】 添加一个自定义类要继承...ObjectContext,添加实体对应的ObjectSet集合,并在默认构造函数中初始化连接等操作,只需要调用父类的构造函数即可,并在构造函数中为实体集合初始化【调用CreateObjectSet <...using System.Text; using System.Data.Objects; namespace EFPoco { publicclass CompanyContext : ObjectContext
using System.Text; using System.Data.Objects; namespace EFPoco { public class CompanyContext : ObjectContext...get { return carSet; } set { carSet = value; } } } } 其实上面这段代码很简单,就是定义了一个继承ObjectContext...总结一下: 我们并没有用EF自动生成的代码,只是使用了它的模型设计器,帮我们生成CSDL/MSL/SSDL的定义文件(xml).然后我们自己写实体类的代码,以及自己写一个数据库访问的网关ObjectContext
override int SaveChanges() { this.ChangeTracker.DetectChanges(); var objectContext...= ((IObjectContextAdapter)this).ObjectContext; foreach (ObjectStateEntry entry in objectContext.ObjectStateManager.GetObjectStateEntries
public string CreateDatabaseScript() { return ((IObjectContextAdapter)this).ObjectContext.CreateDatabaseScript...//store previous timeout previousTimeout = ((IObjectContextAdapter)this).ObjectContext.CommandTimeout...; ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = timeout; }...{ //Set previous timeout back ((IObjectContextAdapter)this).ObjectContext.CommandTimeout
1、无需先查询数据的修改方法 // 将创建的data实体添加到ObjectContext db.Data.Attach(data); // 手动设置状态为修改 db.ObjectStateManager.ChangeObjectState
还有就是第一次创建ObjectContext并查询数据时耗费了大量的时间。...下面这个饼状图给出了第一次创建ObjectContext并用其访问数据库时各种操作所占的时间比 从中可以看出仅仅View Generation一个操作就占用了56%的时间,不过令人欣慰的是,这个操作只出现在第一次查询的时候
这里整理一下学习过程中的注意点: 自动生成代码的功能要关掉 继承的ObjectContext的构造函数的参数其实就是指定数据库连接串Connection String 工具生成的Edmx的Connection...代码的单元测试很重要 延迟加载的属性要设置成Virtual, ObjectContext上需要设置 ContextOptions.LazyLoadingEnabled = true 对于枚举类型的支持是通过复杂类型来实现的
像一个类,属性分为标量属性、导航属性 标量属性:像integer,string等简单类型就是标量属性,也可以是复杂类型 导航属性:是指跟其它实体有关联的属性(数据库中的外键关系) 7、上下文对象 下文对象为ObjectContext...有趣的是,DbContext是ObjectContext的一个包装器或者外观实现者。以一种直观的、友好的、有效的方式暴露底层ObjectContext的功能。
int no = System.Convert.ToInt32(prefix); var query = from item in this.ObjectContext.PRE_EMS3...return query; } else { var query = from item in this.ObjectContext.PRE_EMS3
代码生成策略 改变生成策略为T4 添加TT模版 重构DAL层 创建ICommonRepository接口 实现ICommonRepository方法 T4模版的使用 1.改变EF代码生成策略旧的ObjectContext...这个项目我最初开始创建的时候用的EF版本为EF4.0当时EF4.0只提供了ObjectContext API接口模式 这个访问方式只能对于DataBase Frist用,不能用于Code Frist.所以一直用到这里...从旧的ObjectContext改为T4(操作前备份项目) 第二步: ? 第三步: ? -> ? 最后看到DB.emdx下生成了很多模型类。根据表而生成的!...因为ObjectContext有些方法和属性在DBContext已经不能用了 ObjectContext和ObjectSet都提供了AddObject的功能: 比如 context.AddObject...string.Format( CultureInfo.InvariantCulture, "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery
自己创建EntityConnection,并将之传递给ObjectContext的构造函数,代码如下: public CNBlogsObjectContext() : base(BuildConnection
使用过EF的读者应该很清楚,客户端代码进行数据的查询和更新都是通过自动生成的一个继承自ObjectContext的类来完成的。我们不妨来看看针对上面创建的.edmx模型,这个类具有怎样的定义。...1: public partial class HrEntities : ObjectContext 2: { 3: public ObjectSet Employees...Sales: No 2: Employee ID: 002; First Name: Yan Yan; Last Name: Xu; Is Sales: Yes 从上面的代码中我们可以看到,当我们通过ObjectContext
//获取到user的状态实体,可以修改其状态 var setEntry = ((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.GetObjectStateEntry
领取专属 10元无门槛券
手把手带您无忧上云