Tag: transactionscope

即使未调用System.Transactions.TransactionScope.Commit(),也会提交数据

在什么情况下,包含在System.Transactions.TransactionScope代码仍然可以提交,即使抛出exception并且最外层的范围从未调用过提交? using (var tx = new TransactionScope())包含一个顶级方法,并以相同的方式调用也使用TransactionScope的方法。 我正在使用带有关联tableadapters的类型化数据集。 可能是因为某些原因,适配器中的命令没有出现? 你们中的任何人都知道如何检查他们是否参加了环境的TransactionScope吗?

entity framework6异步操作和TranscationScope

我在stackoverflow上搜索但找不到类似的问题,请指出我是否已经有一个问题。 我试图用同步和异步操作实现一个通用的可重用存储库,但是我对entity framework和工作单元的了解很少,我很难找到实现它的正确方法。 我在SaveAndCommit操作中添加了一些变体,但不知道使用事务和异步执行此操作的最佳方法是什么。 – – 编辑 – – 根据我的理解,当执行多个操作时应该使用事务,但出于理解的目的,我将它用于一个操作。 (如果我错了,请纠正我) 这是我到目前为止所做的 public class Service : IService where TEntity : Entity { #region Constructor and Properties UnitOfWork _unitOfWork { get { return UnitOfWork.UnitOfWorkPerHttpRequest; } } protected DbSet Entities { get { return _unitOfWork.Set(); } } #endregion Constructor and Properties #region Operations public virtual IQueryable QueryableEntities() […]

有没有办法将TransactionScope与现有连接一起使用?

我有一些代码就像建议使用TransactionScope一样,但是有环境连接而不是环境事务。 有没有办法将TransactionScope对象与现有连接一起使用,或者.Net框架中是否有替代方法用于此目的?

TransactionScope:避免分布式事务

我有一个父对象(DAL的一部分),其中包含子对象的集合( List )。 当我将对象保存回DB时,我输入/更新父对象,然后循环遍历每个子对象。 为了可维护性,我将子项的所有代码放入一个单独的私有方法中。 我打算使用标准的ADO事务,但在我的旅行中,我偶然发现了TransactionScope对象,我相信这将使我能够在一个事务中将父方法中的所有数据库交互(以及子方法中的所有交互)包装起来。 到现在为止还挺好..? 接下来的问题是如何在TransactionScope中创建和使用连接。 我听说使用多个连接,即使它们属于同一个DB,也可能迫使TransactionScope认为它是一个分布式事务(涉及一些昂贵的DTC工作)。 是这样吗? 或者是,正如我似乎在其他地方读到的那样,使用相同的连接字符串(它将自己用于连接池)的情况会好吗? 更实际的是,我…… 在父和子中创建单独的连接(尽管具有相同的连接字符串) 在父项中创建一个连接作为参数传递它(对我来说似乎很笨拙) 做点什么……? 更新: 虽然看起来我可以使用我常用的.NET3.5 +和SQL Server 2008+,但这个项目的另一部分将使用Oracle(10g),所以我不妨练习一种可以跨项目使用的技术。 所以我只是简单地将连接传递给子方法。 选项1代码示例: using (TransactionScope ts = new TransactionScope()) { using (SqlConnection conn = new SqlConnection(connString)) { using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = conn; cmd.Connection.Open(); cmd.CommandType = CommandType.StoredProcedure; try { //create & add […]

一个具有多个dbcontexts的事务

我在unit testing中使用事务来回滚更改。 unit testing使用dbcontext,我正在测试的服务使用自己的。 它们都包装在一个事务中,一个dbcontext在另一个事务的块中。 问题是,当内部dbcontext保存他的更改时,外部dbcontext不可见(我不认为这是因为另一个dbcontext可能已经加载了对象)。 这是一个例子: [TestMethod] public void EditDepartmentTest() { using (TransactionScope transaction = new TransactionScope()) { using (MyDbContext db = new MyDbContext()) { //Arrange int departmentId = (from d in db.Departments where d.Name == “Dep1” select d.Id).Single(); string newName = “newName”, newCode = “newCode”; //Act IDepartmentService service = new DepartmentService(); service.EditDepartment(departmentId, newName, […]

C# – System.Transactions.TransactionScope

我对TransactionScope类感到好奇。 在大多数情况下,我认为它是用于数据库连接(这是我用过的)。 我的问题是,您是否可以将任何代码放在TransactionScope的使用块中以使其成为事务性的? MS文档不清楚。 如果它可以用于制作除数据库连接之外的代码事务,那么支持哪些代码呢? 如果它可以使System.IO.File操作事务性,那对我来说似乎很疯狂。

C#控制跨多个数据库的事务

假设我有一个连接到n数据库的Windows窗体应用程序,同时打开了n连接。 我正在寻找的是一次性与所有这些数据库进行交易。 例如,如果我有2个数据库连接: using (ITransaction tx1 = session1.OpenTransaction()) { using (ITransaction tx2 = session2.OpenTransaction()) { // Do the query thingy here } } 写一切都很好,但是当我想在这里和那里查询时,事情变得多余,更不用说添加新连接的可能性了。 我想要的是循环所有已注册的会话并将其包装在服务中,可能是这样的: class TransactionManager { private ISession[] _sessions; public TransactionManager(string[] connectionStrings) { // Initialize the sessions here } public function DoTransaction(string query) { foreach (ISession session in _sessions) { // What to […]