简体   繁体   English

Database.BeginTransaction()实体框架回滚抛出异常

[英]Database.BeginTransaction() Entity framework rollback throws exception

I am using EF6 in my asp.net application. 我在我的asp.net应用程序中使用EF6 In some code block i am using Transaction Scope . 在某些代码块中,我正在使用Transaction Scope Following is my code 以下是我的代码

 using (VerbaTrackEntities dataContext = new VerbaTrackEntities())
        {
            TBL_TARGET target = dataContext.TBL_TARGET.Where(x => x.LNG_TARGET_ID == TargetID).SingleOrDefault();
            if (target != null)
            {
                using (var trans = dataContext.Database.BeginTransaction())
                {
                    try
                    {
                        System.Data.Entity.Core.Objects.ObjectContext oc = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dataContext).ObjectContext;
                        foreach (var Targets in target.TBL_CASE_TARGET.ToList())
                        {
                            oc.DeleteObject(Targets);
                        }
                        foreach (var Targets in target.TBL_USER_TARGET.ToList())
                        {
                            oc.DeleteObject(Targets);
                        }
                        foreach (var Targets in target.TBL_FENCE_TARGET.ToList())
                        {
                            oc.DeleteObject(Targets);
                        }
                        foreach (var Targets in target.TBL_TARGET_COMM.ToList())
                        {
                            oc.DeleteObject(Targets);
                        }
                        foreach (var Targets in target.TBL_TRG_FENCE_STATUS.ToList())
                        {
                            oc.DeleteObject(Targets);
                        }
                        foreach (var Targets in target.TBL_TRG_MOVEMENT.ToList())
                        {
                            oc.DeleteObject(Targets);
                        }
                        TBL_IMAGE deleteImage = dataContext.TBL_IMAGE.Where(s => s.LNG_REF_ID == target.LNG_TARGET_ID && s.INT_TYPE_OF_IMAGE == 2).SingleOrDefault();
                        if (deleteImage != null)
                            oc.DeleteObject(deleteImage);
                        oc.SaveChanges();
                        dataContext.TBL_TARGET.Remove(target);
                        TargetEditForm.UpdateTargetSession(target, 1);
                        trans.Commit();
                        return dataContext.SaveChanges();
                    }
                    catch
                    {
                        trans.Rollback();
                        return 0;
                    }
                }
            }
        }

The following code when fails on trans.Commit(); trans.Commit();失败时的以下代码trans.Commit(); . It goes in catch block for executing trans.Rollback . 它进入catch块以执行trans.Rollback Here it throws exception Underlying data cannot be rollback . 这里抛出异常Underlying data cannot be rollback On debug i found that trans.Connection is null . 在调试时我发现trans.Connectionnull What is correct way to rollback from here .. 什么是从这里回滚的正确方法..

The trans.Rollback on the catch is not necessary, because the transaction is inside using . catch上的trans.Rollback不是必需的,因为事务处于内部using When Disposable() from transaction is called, it does automatically a rollback. 当调用事务中的Disposable()时,它会自动进行回滚。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用petapoco的Database.BeginTransaction()和Database.GetTransaction()之间的区别? - Difference between Database.BeginTransaction() and Database.GetTransaction() Using petapoco? 我们可以使用Database.BeginTransaction定义分布式事务吗? - Can we define a distributed transaction with Database.BeginTransaction? 使用BeginTransaction()的实体框架 - Entity Framework using BeginTransaction() 保护事务实体框架“_dataContext.Database.BeginTransaction()”时出错 - Error securing a transaction Entity Framework "_dataContext.Database.BeginTransaction()" 在db.database.BeginTransaction()范围内添加时,实体FrameWork Core不响应where()查询-Exception(请求超时) - Entity FrameWork Core doesn't response where() query when adding under db.database.BeginTransaction() scope -Exception (Request timeout) 使用实体框架更新数据库会抛出Null Reference Exception - Updating database using entity framework throws Null Reference Exception 越过实体框架 BeginTransaction - Getting past entity framework BeginTransaction 回滚对Entity Framework .NET中的数据库所做的更改 - Rollback changes made to Database in Entity Framework .NET 将 GroupBy DateTime 与实体框架一起使用会引发异常 - Using GroupBy DateTime with Entity Framework throws an exception Take()使用MySQL抛出未实现的异常实体框架6 - Take() Throws Not Implemented Exception Entity Framework 6 with MySQL
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM