EF状态跟踪和Cache

状态跟踪和Cache

  • 一、状态跟踪是什么?
  • 二、测试步骤
    • 1.实体各种状态变化
    • 2.Attach后实体状态变化
    • 3.Attach后,Find后实体状态变化
    • 4.AsNoTracking使用
  • 三、性能提升点
    • 1.Cache使用
    • 2.按需更新
  • 四、源码下载
  • 总结


一、状态跟踪是什么?

要提交到数据库中的对象和DBContext对象存在某种关系:对象是否给Context跟踪;
一次SaveChanges 就把在DBContext中的所有操作都提交到数据库中去了,SaveChange就是以Context为维度的。官方对实体的各种状态变化解释如下:

    // 摘要://实体对象的状态。[Flags]public enum EntityState{// 摘要://     对象存在,但未由对象服务跟踪。在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态。通过调用 System.Data.Objects.ObjectContext.Detach(System.Object)//     方法从上下文中移除实体后,或者使用 System.Data.Objects.MergeOption.NoTrackingSystem.Data.Objects.MergeOption//     加载实体后,该实体也会处于此状态。Detached = 1,//// 摘要://     自对象加载到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改。Unchanged = 2,//// 摘要://     对象已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。对象是通过调用//     System.Data.Objects.ObjectContext.AddObject(System.String,System.Object)//     方法添加到对象上下文中的。Added = 4,//// 摘要://     使用 System.Data.Objects.ObjectContext.DeleteObject(System.Object) 方法从对象上下文中删除了对象。Deleted = 8,//// 摘要://     对象已更改,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。Modified = 16,}<p></p>

二、测试步骤

1.实体各种状态变化

代码如下(示例):

public static void TestEntityState(){ClientInfo client = new ClientInfo(){Address = "广东省深圳市龙华区",CreatorId = 2,CreateTime = DateTime.Now,ClientName = "Fisea wang",Sex = true,Tel = "15915557695",};using (CodeFirstContext context = new CodeFirstContext()){Console.WriteLine(context.Entry<ClientInfo>(client).State);//Detachedclient.ClientName += "01";Console.WriteLine(context.Entry<ClientInfo>(client).State);//Detachedcontext.Clients.Add(client);Console.WriteLine(context.Entry<ClientInfo>(client).State);//Addedcontext.SaveChanges();Console.WriteLine(context.Entry<ClientInfo>(client).State);//Unchangedclient.ClientName += "02";Console.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部