连续情况下的CRUD操作是一项相当容易的任务,因为默认情况下,上下文会自动跟踪实体在其生命周期中发生的更改,AutoDetectChangesEnabled为true。
以下示例显示如何添加,更新和删除连接的场景中的实体(在上下文的范围内),而后者又将在数据库上执行insert,update和delete命令。上下文将自动检测更改并更新实体的状态。
class Program { static void Main(string[] args) { using (var ctx = new Jason_TestEntities()) { var List = ctx.wolf_example.ToList(); var model = List.FirstOrDefault(); //修改 model.Name = "更新"; //删除 ctx.wolf_example.Remove(List.FirstOrDefault()); ctx.wolf_example.Remove(List.FirstOrDefault(x => x.Num == 20037)); ctx.wolf_example.Remove(List.SingleOrDefault(x=>x.Num == 20038)); //在数据库中执行插入,更新和删除查询 ctx.SaveChanges(); } } }
注意:如果context.Configuration.AutoDetectChangesEnabled = false,则上下文无法检测对现有实体所做的更改,因此不执行更新查询。您需要在SaveChanges()之前调用context.ChangeTracker.DetectChanges(),以便检测已编辑的实体并将其标记为“已修改”。
class Program { static void Main(string[] args) { List<wolf_example> Listw; using (var ctx = new Jason_TestEntities()) { Listw = ctx.wolf_example.ToList(); } using (var ctx1 = new Jason_TestEntities()) { var update = Listw.FirstOrDefault(); ctx1.wolf_example.Attach(update); update.Name = "update.Name111"; var Entry = ctx1.Entry(update); Console.WriteLine("EntityState: {0}", Entry.State); Console.ReadKey(); ctx1.SaveChanges(); } } }