使用交易与实体框架进行后退更改



我有这个特定的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。选择它,单击确定。然后尝试重建您的项目。另外,请确保顶部有使用语句(C#)或Imports语句(VB),例如使用System.Transactions;

,更改在代码中。谢谢

您需要完成交易,否则交易将回滚。因此,在您的代码中,您需要添加transaction.complete()方法,如果不这样做,它将自身回滚。

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

如果您与实体框架合作,则不必担心交易。上下文管理工作单位,并看到它是在一次交易中承诺(或回滚)的。您的代码包含过多的低级数据访问内容。让EF执行您的CRUD动作。

实体框架使您可以在代码的大部分部分中成为持久性无知。我的观点是:您不需要DAO模式。更糟糕的是:它只会阻碍。它首先将数据库操作和上下文实例分开,然后您必须通过事务范围将其放在一起。这意味着:您正在管理工作单位。与Poco的合作,而不是与Dao一起工作。让一个上下文实例跟踪更改并通过一个SaveChanges()调用保存。

相关内容

  • 没有找到相关文章

最新更新