zoukankan      html  css  js  c++  java
  • Entity Framework Tutorial Basics(19):Change Tracking

    Change Tracking in Entity Framework:

    Here, you will learn how entity framework tracks changes on entities during its life time.

    Entity framework supports automatic change tracking of the loaded entities during the life time of the context. DbChangeTracker class gives you all the information about current entities being tracked by the context.

    Please note that every entity must have EntityKey (primary key) property in order to be tracked by the context. Entity framework will not add any entity in the conceptual model which does not have an EntityKey property.

    The following code snippet shows how context class tracks the entities and changes occurred in it:

    static void Main(string[] args)
    {
        using (var ctx = new SchoolDBEntities())
        {
    
            Console.WriteLine("Find Student");
            var std1 = ctx.Students.Find(1);
    
            Console.WriteLine("Context tracking changes of {0} entity.", ctx.ChangeTracker.Entries().Count());
    
            DisplayTrackedEntities(ctx.ChangeTracker);
    
            Console.WriteLine("Find Standard");
    
            var standard = ctx.Standards.Find(1);
    
            Console.WriteLine("Context tracking changes of {0} entities.", ctx.ChangeTracker.Entries().Count());
            Console.WriteLine("");
            Console.WriteLine("Editing Standard");
                    
            standard.StandardName = "Edited name";
            DisplayTrackedEntities(ctx.ChangeTracker);
    
    
            Teacher tchr = new Teacher() { TeacherName = "new teacher" };
            Console.WriteLine("Adding New Teacher");
    
            ctx.Teachers.Add(tchr);
            Console.WriteLine("");
            Console.WriteLine("Context tracking changes of {0} entities.", ctx.ChangeTracker.Entries().Count());
            DisplayTrackedEntities(ctx.ChangeTracker);
    
            Console.WriteLine("Remove Student");
            Console.WriteLine("");
    
            ctx.Students.Remove(std1);
            DisplayTrackedEntities(ctx.ChangeTracker);
        }
    }
    
    private static void DisplayTrackedEntities(DbChangeTracker changeTracker)
    {
        Console.WriteLine("");
    
        var entries = changeTracker.Entries();
        foreach (var entry in entries)
        {
            Console.WriteLine("Entity Name: {0}", entry.Entity.GetType().FullName);
            Console.WriteLine("Status: {0}", entry.State);
        }
        Console.WriteLine("");
        Console.WriteLine("---------------------------------------");
    }
    Output:

    Find Student 
    Context tracking changes of 1 entity.

    Entity Name: EFTutorials.Student
    Status: Unchanged

    ---------------------------------------
    Find Standard
    Context tracking changes of 2 entities.

    Editing Standard

    Entity Name: EFTutorials.Standard
    Status: Modified
    Entity Name: EFTutorials.Student
    Status: Unchanged

    ---------------------------------------
    Adding New Teacher

    Context tracking changes of 3 entities.

    Entity Name: EFTutorials.Teacher
    Status: Added
    Entity Name: EFTutorials.Standard
    Status: Modified
    Entity Name: EFTutorials.Student
    Status: Unchanged

    ---------------------------------------
    Remove Student

    Entity Name: EFTutorials.Teacher
    Status: Added
    Entity Name: EFTutorials.Standard
    Status: Modified
    Entity Name: EFTutorials.Student
    Status: Deleted

    ---------------------------------------

    As you can see in the above sample code snippet and output, context keeps track of entities whenever we retrieve, add, modify or delete any entity. Please notice that context is alive during any of the operations on entities. Context will not keep track if you do any operation on entities out of its scope.

  • 相关阅读:
    如何在宿主机上查看kvm虚拟机的IP
    virt-viewer 连kvm 虚机
    用virsh console vhosts 卡住
    sshpass 实现shell脚本直接加载密登录服务器
    maven创建helloword项目
    linux 安装maven
    xz -d Python-3.4.7.tar.xz
    查看哪个用户登录过服务器 记录 时间 和 ip
    两台linux服务器各有两个不同的用户 其中一个服务器可以无密码登录服务器
    maven私服nexus
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/5649047.html
Copyright © 2011-2022 走看看