public ActionResult Create([Bind(Include = "Id,Name,Category,CreateDate")] Product product) { if (ModelState.IsValid) { db.Products.Add(product); db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.Category = new SelectList(db.Categories, "Id", "Name", product.Category); return(View(product)); }
//【3】其实,我们应该自己能够创建和控制事务的执行:就是自定义事务。 //自定义事务可以在某些时候改变事务的隔离级别 //默认:Read Commit (提交读) 我们可以改成未提交读(未提交读,可能产生脏数据) //脏数据:当一个事务在访问数据的时候,并且对这个数据做了修改,但是这个修改没有正式提交, //这时候,另外一个事务也在访问这个数据,然后使用了这个数据。这时候脏数据就产生。 //select * from students with(nolock) ...这种情况是有脏数据的可能。 //set transaction isolation level read committed //如果数据中有Share锁 ,同时记录中有排他性,会编程IS锁 //结果:如果一个记录上有S锁,那么执行insert的时候是无法完成的,因为insert会加上排他锁。 //如果加上nolock,这时候,我们执行的insert、update、等不会被影响。这种做法可以在高并发的情况下考虑。 //实现自定义的事务1 private static void TestCustomTransaction1() { using (EFDBEntities db = new EFDBEntities()) { using (var cusTransaction = db.Database.BeginTransaction (System.Data.IsolationLevel.ReadUncommitted)) { try { db.Database.Log = Console.WriteLine; //我们可以在这个地方添加需要的增删改操作... db.StudentClass.Add(new StudentClass { ClassId = 35, ClassName = ".NET高级学习班5" }); db.StudentClass.Add(new StudentClass { ClassId = 36, ClassName = ".NET高级学习班6" }); db.SaveChanges(); cusTransaction.Commit(); } catch (Exception ex) { cusTransaction.Rollback(); throw ex; } } } Console.Read(); }
public int Save(ItemType itemType) { ItemType temp = context.ItemTypes.Add(itemType); context.SaveChanges(); return(temp.Id); }
//实现自定义的事务2 private static void TestCustomTransaction2() { using (EFDBEntities db = new EFDBEntities()) { using (var cusTransaction = new TransactionScope()) { try { db.Database.Log = Console.WriteLine; //我们可以在这个地方添加需要的增删改操作... db.StudentClass.Add(new StudentClass { ClassId = 45, ClassName = ".NET高级学习班11" }); db.StudentClass.Add(new StudentClass { ClassId = 46, ClassName = ".NET高级学习班10" }); db.SaveChanges(); cusTransaction.Complete(); } catch (Exception ex) { Transaction.Current.Rollback(); throw ex; } } } Console.Read(); }
//【2】在查询中是没有事务的 private static void TestTransaction2() { using (EFDBEntities db = new EFDBEntities()) { //我们可以通过log接口来随时查看日志信息,它在DataBase里面 db.Database.Log = Console.WriteLine; db.StudentClass.FirstOrDefault(); db.SaveChanges(); Console.Read(); } }
//【1】在增删改中默认开启事务 private static void TestTransaction1() { using (EFDBEntities db = new EFDBEntities()) { //我们可以通过log接口来随时查看日志信息,它在DataBase里面 db.Database.Log = Console.WriteLine; db.StudentClass.Add(new StudentClass { ClassId = 30, ClassName = ".NET高级学习班1" }); db.StudentClass.Add(new StudentClass { ClassId = 31, ClassName = ".NET高级学习班2" }); db.SaveChanges(); Console.Read(); } }
public void Complete() { _context.SaveChanges(); }
// public IRepository<OS_Schedule> ScheduleRepository => _scheduleRepository ?? (_scheduleRepository = new Repository<OS_Schedule>(_dbContext)); public void SaveChanges() { CheckIsDisposed(); _dbContext.SaveChanges(); }