public static void 消除EF追踪() { using (var db = new DonatorsContext()) { Console.WriteLine("默认情况下,实体的状态"); var provinceNormal = db.Provinces.Include(p => p.Donators); foreach (var province in provinceNormal) { FluentConsole.Green.Line("省份追踪状态:{0}", db.Entry(province).State); foreach (var donator in province.Donators) { Console.WriteLine("打赏者的追踪状态:{0}", db.Entry(donator).State); } } Console.WriteLine("使用AsNoTracking()方法后,实体的状态"); var provinceNoTracking = db.Provinces.Include(p => p.Donators).AsNoTracking(); //使用AsNoTracking()方法设置不再追踪实体 foreach (var province in provinceNoTracking) { FluentConsole.Green.Line("省份追踪状态:{0}", db.Entry(province).State); foreach (var donator in province.Donators) { Console.WriteLine("打赏者的追踪状态:{0}", db.Entry(donator).State); } } } Console.WriteLine("EF中实体的状态比较。"); }
//设置实体状态删除 public static void 设置实体状态删除() { //通过设置实体状态删除 var toDeleteProvince = new Province { Id = 1 }; toDeleteProvince.Donators.Add(new Donator { Id = 2 }); toDeleteProvince.Donators.Add(new Donator { Id = 3 }); toDeleteProvince.Donators.Add(new Donator { Id = 4 }); using (var db = new DonatorsContext()) { PrintAllDonators(db); //删除前先输出现有的数据,不能写在下面的using语句中,否则Attach方法会报错,原因我相信你已经可以思考出来了 } using (var db = new DonatorsContext()) { db.Provinces.Attach(toDeleteProvince); foreach (var donator in toDeleteProvince.Donators.ToList()) { db.Entry(donator).State = EntityState.Deleted; } db.Entry(toDeleteProvince).State = EntityState.Deleted; //删除子实体再删除父实体。 db.SaveChanges(); Console.WriteLine("删除之后的数据如下:\r\n"); PrintAllDonators(db); } }
//Web应用,更新Province public static void Web应用UpdateProvince() { var province = new Province { Id = 2, ProvinceName = "山东省更新" }; province.Donators.Add(new Donator { Name = "醉、千秋", //再改回来 Id = 4, Amount = 12m, DonateDate = DateTime.Parse("2015-7-12") }); using (var db = new DonatorsContext()) { db.Entry(province).State = EntityState.Modified; foreach (var donator in province.Donators) { db.Entry(donator).State = EntityState.Modified; } db.SaveChanges(); } Console.WriteLine("Web应用更新Province"); }
//Insert Province ,修改实体的状态为added public static void InsertProvince2() { var province = new Province { ProvinceName = "广东省" }; province.Donators.Add(new Donator { Name = "求余", Amount = 30, DonateDate = DateTime.Parse("2016-7-12") }); using (var db = new DonatorsContext()) { db.Entry(province).State = EntityState.Added; db.SaveChanges(); } Console.WriteLine("InsertProvince,修改实体的状态为added"); }