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.

  • 相关阅读:
    WEB 3D SVG CAD 向量 几个实施(转)
    Dos.Common
    dos.orm
    php程序员招聘
    python之禅
    Electron
    MongoDB主从复制
    OSG开发概览
    从1-100中隔5个数去掉一个数,最后去掉的哪个数(如果数过一遍了从前端接着开始)?
    django/python日志logging 的配置以及处理
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/5649047.html
Copyright © 2011-2022 走看看