Tuesday, 5 November 2024

entity transcation rollback

 try

{

    using (var transaction = db.Database.BeginTransaction())

    {

        var appraisalDB = db.Appraisals.Where(p => p.AppraisalId == appraisalsVM.AppraisalId).SingleOrDefault();

        appraisalsVM.BindModelTo(appraisalDB);

        appraisalDB.ManagersManagerName = appraisalsVM.LoggedInUser.EmployeeName;

        appraisalDB.ManagersManagerSignDate = DateTime.Now;


        appraisalDB.ModifiedOn = DateTime.Now;

        db.SaveChanges();


        // Call archival procedure

        var connectionString = db.Database.GetDbConnection().ConnectionString;

        DataSet ds = new DataSet();

        using (SqlConnection conn = new SqlConnection(connectionString))

        {

            conn.Open();

            SqlCommand cmd = new SqlCommand("[dbo].[proc_Appraisal_Archive]", conn);

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@AppraisalID", appraisalsVM.AppraisalId);

            SqlDataAdapter adapter = new SqlDataAdapter(cmd);

            adapter.Fill(ds);

            conn.Close();

        }


        // Commit transaction if all actions are successful

        transaction.Commit();

        return Ok(new { status = "Success" });

    }

}

catch (Exception ex)

{

    // Rollback transaction and log error

    if (transaction != null)

    {

        transaction.Rollback();

    }


    var data = new TblErrors

    {

        ErrorMessage = ex.Message,

        ErrorNumber = ex.HResult,

        ErrorProcedure = "proc_Appraisal_Archive",

        ErrorLine = 525

    };

    this.SaveErrors(data);


    return Ok(new { status = "Failed" });

}

------------------above code modified in case in below code any error in below procedure falied then need to roolback first transaction also.
below is the old code
public IActionResult SignManagersManagerAppraisal(vmAppraisals appraisalsVM)
{
using (Performance_ManagmentContextDbo db = new Performance_ManagmentContextDbo())
{
try
{
            var appraisalDB = db.Appraisals.Where(p => p.AppraisalId == appraisalsVM.AppraisalId).SingleOrDefault();
            appraisalsVM.BindModelTo(appraisalDB);
            appraisalDB.ManagersManagerName = appraisalsVM.LoggedInUser.EmployeeName;
            appraisalDB.ManagersManagerSignDate = DateTime.Now;

            appraisalDB.ModifiedOn = DateTime.Now;
            db.SaveChanges();

            //call archival procedure

            var connectionString = db.Database.GetDbConnection().ConnectionString;
            DataSet ds = new DataSet();
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("[dbo].[proc_Appraisal_Archive]", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@AppraisalID", appraisalsVM.AppraisalId);
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                adapter.Fill(ds);
                conn.Close();
            }

            return Ok(new { status = "Success" });
        }
catch(Exception ex)
{
            var data = new TblErrors();
            data.ErrorMessage = ex.Message;
data.ErrorNumber = 0;
data.ErrorProcedure = "proc_Appraisal_Archive";
            data.ErrorLine = 525;
            this.SaveErrors(data);

            return Ok(new { status = "Failed" });

        }

No comments:

Post a Comment

7 Common mistakes in Dot Net — You can avoid

  There are many common mistakes made during .NET (ASP.NET, .NET Core) development, which affect performance, security, and code… Code Crack...