我想知道在这三种方式之间在同一数据库上下文中执行事务的实际差异是什么:
1)使用一个单独的多个操作SaveChanges(),而不显式使用sql事务
using (TestDbContext db = new TestDbContext())
{
// first operation
// second operation
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
2)SaveChanges()使用sql事务,使用一个单独的多个操作
using (TestDbContext db = new TestDbContext())
using (DbContextTransaction trans = db.Database.BeginTransaction())
{
// operation 1
// operation 2
db.SaveChanges();
trans.commit();
}
Run Code Online (Sandbox Code Playgroud)
3)SaveChanges()使用sql事务进行多个多个操作
using (TestDbContext db = new TestDbContext())
using (DbContextTransaction trans = db.BeginTransaction())
{
// operation 1
db.SaveChanges();
// operation 2
db.SaveChanges();
trans.commit();
}
Run Code Online (Sandbox Code Playgroud)
在(2)和(3)中,如果commit()应该实际执行对数据库的请求的sql查询,是否真的不同,比如保存每个操作的更改或保存所有操作的更改?
如果(1)也可以允许在同一个数据库上下文中安全地执行多个操作,那么手动启动事务的主要用途是什么?我说我们可以手动提供try/catch块来回滚事务,如果发生了不好的事情,但AFAIK,SaveChanges()也会自动覆盖它,至少是SQLServer.
**更新:另一件事是:我应该将数据库上下文和事务变量设置为类级别,还是应该只包含方法本地?
我正在构建一个MVVM WPF应用程序,其中有一个向导,在父视图(V)中加载了多个子视图,该视图使用ViewModel(VM)作为其数据上下文.其中一个MVVM模式原则指出VM不应该知道绑定它的V. 在这种情况下,VM确实不知道V,但是,VM(1)管理由不同子视图(即不同步骤)组成的列表属性,以及(2)具有另一个名为CurrentView动态分配元素的属性在列表中.在V中CurrentView受到约束ContentControl
我的问题是: