4.跟踪

Posted nocanstillbb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.跟踪相关的知识,希望对你有一定的参考价值。

默认情况下,ef在datacontext生命周期中跟踪已加载的实体

当操作数据库现有数据时,才会跟踪

如果在datacontext回收之前没savechanges,那么跟踪的状态就会丢失.

实体得要有主键属性才能跟踪

可以用下面的方法来跟踪datacontext的状态(Added Modified Deleted Unchanged Detached)

private static void DisplayTrackedEntities(DbChangeTracker changeTracker)

    var entries = changeTracker.Entries();
    foreach (var entry in entries)
    
        Console.WriteLine("Entity Name: 0", entry.Entity.GetType().FullName);
        Console.WriteLine("Status: 0", entry.State);
    

 

输出Added

using (var context = new BookStore())

    Console.WriteLine("Adding Author");
    Author author = new Author()  Name = "Mark" ;
     
    context.Authors.Add(author);
    Console.WriteLine("Context tracking changes of 0 entities.", context.ChangeTracker.Entries().Count());
    DisplayTrackedEntities(context.ChangeTracker);

 

 

输出Modified 

using (var context = new BookStore())

    Console.WriteLine("Update Author");
    Author author = context.Authors
        .FirstOrDefault();
     
    author.Name = "Russell";
    
    Console.WriteLine("Context tracking changes of 0 entities.", context.ChangeTracker.Entries().Count());
    DisplayTrackedEntities(context.ChangeTracker);

 

 

输出Deleted

using (var context = new BookStore())

    Console.WriteLine("Delete Author");
    Author author = context.Authors
        .FirstOrDefault();
     
    context.Authors.Remove(author);
    
    Console.WriteLine("Context tracking changes of 0 entities.", context.ChangeTracker.Entries().Count());
    DisplayTrackedEntities(context.ChangeTracker);

 

 

输出Unchanged 

using (var context = new BookStore())

    Author author = context.Authors
        .FirstOrDefault();
    
    Console.WriteLine("Context tracking changes of 0 entities.", context.ChangeTracker.Entries().Count());
    DisplayTrackedEntities(context.ChangeTracker);

 

 

输出Detached 

Author author;
        
using(var context = new BookStore())

    author = context.Authors
        .FirstOrDefault();


using (var context = new BookStore())
                    
    Console.Write(context.Entry(author).State);

 

以上是关于4.跟踪的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 4.1 两个跟踪查询

IDA调试跟踪

chapter 13_4 跟踪table的访问

如何在 Play 2.4.0 上使用 Anorm 启用跟踪/调试输出

如何在 Laravel 4 中跟踪用户下载?

Entity Framework Core中更改跟踪工作原理