实体框架中的变更跟踪


实体框架支持在上下文的生命周期内对加载的实体的自动更改跟踪。DbChangeTracker类为您提供了上下文跟踪的当前实体的所有信息。
请注意,每个实体必须具有EntityKey(主键)属性才能被上下文跟踪。实体框架不会在没有EntityKey属性的概念模型中添加任何实体。
以下代码片段显示了上下文类如何跟踪其中发生的实体和更改:

    class Program
    {
        static void Main(string[] args)
        {
            using (var ctx = new Jason_TestEntities())
            {
                wolf_example example = ctx.wolf_example.Find(20051);
                Console.WriteLine("Find wolf_example");
                Console.WriteLine("{0}个实体的上下文跟踪更改", ctx.ChangeTracker.Entries().Count());
                DisplayTrackedEntities(ctx.ChangeTracker);
                Console.WriteLine("Find Products");
                var Products = ctx.Products.Find(112459);
                Console.WriteLine("{0}个实体的上下文跟踪更改", ctx.ChangeTracker.Entries().Count());
                Products.ProductName = "修改111";
                DisplayTrackedEntities(ctx.ChangeTracker);  
                Console.WriteLine("Remove example");
                Console.WriteLine("");
                ctx.wolf_example.Remove(example);
                DisplayTrackedEntities(ctx.ChangeTracker);
                Console.ReadKey();
            }
        }

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

 

原文地址:https://www.cnblogs.com/lgxlsm/p/7480029.html