猿教程 Logo

跟踪实体的更改

在这里,您将了解实体框架如何跟踪实体在其生命周期内的变化。

实体框架支持自动跟踪上下文加载的实体在生命周期的变化。DbChangeTracker类可以给你所有的关于当前实体被上下文跟踪的信息。


请注意,每一个实体必须有EntityKey(主键),这是为了被上下文跟踪。

实体框架不会将任何一个没有EntityKey属性的实体添加到概念模型中。

下面的代码片段显示了上下文类跟踪实体和实体发生的变化变化:

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("---------------------------------------");
}

输出结果:

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


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

正如你在上面的示例代码片段和输出所看到的,每当我们检索、添加、修改或删除任何实体,上下文将跟踪该实体的变化。

请注意,上下文在任何实体的操作期间都是有效的。

如果你在上下文的范围外操作一个实体,上下文将不会跟踪该实体的变化。



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/entity/change-tracking.html