0

我有这个从通用 DAO 继承方法的特定 DAO 我想向此代码添加一个事务,以便回滚在发现异常时所做的所有更改

        TDAO tDAO = new TDAO();
        TDAO2 tDAO2 = new TDAO2();


        //Get the DAO to delete from the database let's call them dDao and dDao2

        //Start the Transaction
        using (TransactionScope trans = new TransactionScope())
        {
            try
            {
                //Delete all SGC Associated switch
                TDAO2.Delete(dDao);

                //Delete switch
                TDAO.Delete(dDao2);

                //send notification
                base.SendChangeNotification();

                //Commit the Information Completing the Transaction
                trans.Complete();
            }
            catch (UpdateException ex)//SQL exception
            {
                //Log the error
                //Rollback the changes if there is an exception
                throw new Exception(Resources.ErrorMessages.OperationNotPermited);
            }
            catch (Exception ex) //Other exception
            {
                //Log the error
                throw new Exception(Resources.ErrorMessages.UndifenedError);
            }
        }

在 Visual Studio 中,转到项目中的“引用”图标。右键单击,添加引用。然后搜索 System.Transactions.dll。选择它,单击确定。然后尝试重建您的项目。还要确保顶部有 Using 语句 (C#) 或 Imports 语句 (VB),例如 Using System.Transactions;

并且更改在代码中。谢谢你

4

2 回答 2

0

您需要完成事务,否则事务将回滚。因此,在您的代码中,您需要添加 Transaction.Complete() 方法,如果您不这样做,它会自行回滚。

于 2012-11-06T08:22:20.847 回答
0

尽管您将此标记为已解决,但仍然是一个答案。

如果您使用实体框架,则不必担心事务。上下文管理工作单元并确保它在一个事务中提交(或回滚)。您的代码包含太多低级数据访问内容。让 EF 执行您的 CRUD 操作。

Entity Framework 允许您在代码的大部分部分中对持久性一无所知。我的观点是:你不需要 DAO 模式。更糟糕的是:它只会妨碍你。它首先将数据库操作和上下文实例分开,然后您必须通过事务范围将它们放在一起。这意味着:您正在管理工作单元。与 POCO 合作,而不是与 DAO 合作。让一个上下文实例跟踪更改并通过一次SaveChanges()调用保存它们。

于 2012-11-06T10:22:32.657 回答