zoukankan      html  css  js  c++  java
  • Entity Framework Core系列教程-22-跟踪实体图(TrackGraph)

    Entity Framework Core中的ChangeTracker.TrackGraph()

    在上一章中,您了解了不同的方法为Entity Framework Core 2中的实体图的每个实体设置不同的EntityState。在这里,您将学习如何跟踪实体图并为图中的每个单个实体设置适当的EntityState。
    Entity Framework Core中引入了ChangeTracker.TrackGraph()方法,以跟踪整个实体图并将自定义实体状态设置为图中的每个实体。
    方法签名: public virtual void TrackGraph(object rootEntity, Action<EntityEntryGraphNode> callback)
    ChangeTracker.TrackGraph()方法开始跟踪实体以及通过遍历其导航属性可到达的任何实体。为每个发现的实体调用指定的回调,并且必须为每个实体设置适当的EntityState。回调函数使我们可以实现自定义逻辑来设置适当的状态。如果未设置任何状态,则实体保持未跟踪状态。
    下面的示例演示TrackGraph方法。

    var student = new Student() { //Root entity (with key value)
        StudentId = 1,
        Name = "Bill",
        Address = new StudentAddress()  //Child entity (with key value)
        {
            StudentAddressId = 1,
            City = "Seattle",
            Country = "USA"
        },
        StudentCourses = new List<StudentCourse>() {
                new StudentCourse(){  Course = new Course(){ CourseName="Machine Language" } },//Child entity (empty key)
                new StudentCourse(){  Course = new Course(){  CourseId=2 } } //Child entity (with key value)
            }
    };
    var context = new SchoolContext();
                
    context.ChangeTracker.TrackGraph(student, e => {
                                                    if (e.Entry.IsKeySet)
                                                    {
                                                        e.Entry.State = EntityState.Unchanged;
                                                    }
                                                    else
                                                    {
                                                        e.Entry.State = EntityState.Added;
                                                    }
                                                });
    
    foreach (var entry in context.ChangeTracker.Entries())
    {
        Console.WriteLine($"Entity: {entry.Entity.GetType().Name}, 
                            State: {entry.State.ToString()} ");
    }
    
    Output:
    Entity: Student, State: Added
    Entity: StudentAddress, State: Unchanged
    Entity: StudentCourse, State: Added
    Entity: Course, State: Added
    Entity: StudentCourse, State: Added
    Entity: Course, State: Unchanged
    

    在上面的示例中,ChangeTracker.TrackGraph()方法用于为学生实体图中的每个实体设置状态。第一个参数是实体图,第二个参数是设置每个实体状态的函数。我们使用lambda表达式为具有有效键值的实体设置了“不变”状态,为具有空键值的实体设置了“添加”状态。当实体具有有效的键属性值时,IsKeySet变为true。
    因此,我们可以使用ChangeTracker.TrackGraph()方法为图中的每个实体设置不同的EntityState。

  • 相关阅读:
    VMware workstation安装linux(ubuntu)配置详解
    虚拟机的三种网络模式
    虚拟机(VMware Workstation)的使用方法
    零基础学习hadoop到上手工作线路指导(初级篇)
    Hadoop到底能做什么?怎么用hadoop?
    什么是云计算技术
    什么是云计算
    静态数据库迁移
    apache-mysql-php安装与配置
    CentOS6.6下的authpuppy源码安装与配置完全纯净版,内有问题解答
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878801.html
Copyright © 2011-2022 走看看