zoukankan      html  css  js  c++  java
  • DbSet中Find,AsNoTracking,Attach及DBEntityEntry,ChangeTracker

    Find,AsNoTracking,Attach,DBEntityEntry,ChangeTracker,Local


    一:DBSet

    我们在SaveChange的时候,如果获取到DbSet中一些Entity的变化。。。。


    二:我们如果动态的detect这些entity的变化。。。

    1. DBEntityEntry.... 可以获取的到某一个entity的实时状态。。。

    db.Entry => 它的result类型。。

    《1》 可以被detect entity的哪些属性:

    State: Modified

    OriginalValues: myentity.OriginalValues["StudentName"]

    CurrentValues: myentity.CurrentValues["StudentName"]


    2. ChangeTracker: 可以获取得到当前dbcontext下面的所有entity的变化。。。。

    result类型就是 IEnumerable<DbEntityEntry>


    {System.Data.Entity.Infrastructure.DbEntityEntry}
    CurrentValues: {System.Data.Entity.Infrastructure.DbPropertyValues}
    Entity: {ConsoleApplication30.Student}
    InternalEntry: {System.Data.Entity.Internal.InternalEntityEntry}
    OriginalValues: “(entityList.FirstOrDefault()).OriginalValues”引发了类型“System.InvalidOperationException”的异常
    State: Added
    _internalEntityEntry: {System.Data.Entity.Internal.InternalEntityEntry}

    using (SchoolDBEntities db = new SchoolDBEntities())
    {
    //update操作
    var item = db.Students.FirstOrDefault();
    item.StudentName = "张三";

    //add操作
    db.Students.Add(new Student() { StudentName = "王五" });

    //删除操作
    var myitem = db.Students.FirstOrDefault(i => i.StudentID == 3);
    db.Students.Remove(myitem);

    //检测到当前db下面所有被跟踪的实体
    var entityList = db.ChangeTracker.Entries();

    foreach (var entity in entityList)
    {

    }
    }


    从这个例子中,我们可以看到,确实可以跟跟踪,方便我们去检测entity的状态。。。。


    三:Local

    这个Local只跟踪CUR操作。。。 ChangeTracker有一点点不一样。。。

    Local只能针对某一个DBset而言。。。

    ChangeTracker可以跟踪整个DbContext。。。。

    Entry 只能跟踪某一个实体。。。


    四:看一下DBSet下面的其他属性

    using (SchoolDBEntities db = new SchoolDBEntities())
    {
    //update操作
    var item = db.Students.FirstOrDefault();
    item.StudentName = "张三";

    //add操作
    db.Students.Add(new Student() { StudentName = "王五" });

    //删除操作
    var myitem = db.Students.FirstOrDefault(i => i.StudentID == 3);
    db.Students.Remove(myitem);

    foreach (var mylocal in db.Students.Local)
    {

    }

    ////检测到当前db下面所有被跟踪的实体
    //var entityList = db.ChangeTracker.Entries();

    //foreach (var entity in entityList)
    //{

    //}
    }

    1. AsNoTracking()

    using (SchoolDBEntities db = new SchoolDBEntities())
    {
    //update操作
    var item = db.Students.AsNoTracking().FirstOrDefault();
    item.StudentName = "张三";

    var item2 = db.Students.FirstOrDefault();
    item2.StudentName = "李四";

    var track1 = db.Entry(item);

    var trace2 = db.Entry(item2);
    }

    track1
    {System.Data.Entity.Infrastructure.DbEntityEntry`1[ConsoleApplication30.Student]}
    CurrentValues: “track1.CurrentValues”引发了类型“System.InvalidOperationException”的异常
    Entity: {System.Data.Entity.DynamicProxies.Student_3D2C2AEAA0104FF4F10F5ECE055C297922EDA7306BF72635BE0EE3A849DCA14A}
    OriginalValues: “track1.OriginalValues”引发了类型“System.InvalidOperationException”的异常
    State: Detached
    _internalEntityEntry: {System.Data.Entity.Internal.InternalEntityEntry}
    trace2
    {System.Data.Entity.Infrastructure.DbEntityEntry`1[ConsoleApplication30.Student]}
    CurrentValues: {System.Data.Entity.Infrastructure.DbPropertyValues}
    Entity: {System.Data.Entity.DynamicProxies.Student_3D2C2AEAA0104FF4F10F5ECE055C297922EDA7306BF72635BE0EE3A849DCA14A}
    OriginalValues: {System.Data.Entity.Infrastructure.DbPropertyValues}
    State: Modified
    _internalEntityEntry: {System.Data.Entity.Internal.InternalEntityEntry}


    DbSet仓储模式自带的一个Find操作。。。

    //update操作
    var item = db.Students.Find(2);

  • 相关阅读:
    django 项目需要注意的一些点
    VUE之路
    Oracle 表格碎片的查看方法
    RHEL 6.x or 7.x 使用分区绑定ASM 磁盘的方法
    RMAN 修复主库 nologging 操作导致物理备库的坏块
    Oracle 数据库19c 回退降级到 11.2.0.4 方案
    如何评估oracle 数据库rman全备和增量备份大小
    在将Oracle GI和DB升级到19c或降级到以前的版本之前需要应用的补丁 (Doc ID 2668071.1)
    Oracle 数据库坏块处理
    opatch auto 安装11.2.0.4.20190115 PSU遇到 OUI-67133: Execution of PRE script failed,with returen value 1 报错
  • 原文地址:https://www.cnblogs.com/dragon-L/p/6551176.html
Copyright © 2011-2022 走看看