[c#] LINQ-to-SQL을 사용하여 트랜잭션 내부에서 저장 프로 시저 호출을 롤백합니까?


0 Answers

내가 저장된 procs를 사용하지는 않지만, 당신은 그렇게 할 수있다.

    public Response<SomeObject> SaveSomething(Object yourObject)
    {
        DbTransaction dbTransaction = null;
        try
        {
            using (DataContext context = new DataContext())
            {
                    //Creates a new DB transaction
                    if (context.Connection.State == System.Data.ConnectionState.Closed)
                    {
                        context.Connection.Open();
                    }
                    dbTransaction = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable);
                    context.Transaction = dbTransaction;

         context.SaveYourObject(yourObject);
                    //Commit the transaction
                    dbTransaction.Commit();
                    response.ResponseObject = yourObject;
                    response.Messages.AddSuccessfulSave("Saved!");
                }
            }
        }
        catch (ChangeConflictException cex)
        {
            if (dbTransaction != null) dbTransaction.Rollback();
            response.Errors.AddConcurrencyError();
            response.IsSuccessful = false;
        }
        catch (SqlException sqlEx)
        {
            if (dbTransaction != null) dbTransaction.Rollback();
            if (sqlEx.Class == 14 && (sqlEx.Number == 2601 || sqlEx.Number == 2627)) //Duplicated key
            {
                response.Errors.Add(new Error
                {
                    Name = "Duplicate item",
                    Description = "This object already exists."
                });
                ExceptionPolicy.HandleException(sqlEx, SERVICE_EXCEPTION_POLICY);
                response.IsSuccessful = false;
            }
            else //other SQL errors
            {
                response.Errors.AddSavingError("Your object", yourObjectId);
                ExceptionPolicy.HandleException(sqlEx, SERVICE_EXCEPTION_POLICY);
                response.IsSuccessful = false;
            }
        }
Question

SQL Server 데이터베이스와 함께 실행되는 C # .net winform 프로그램이 있습니다. LINQ-to-SQL을 사용하고 있습니다. LINQ-to-SQL을 사용하여 프로그램 내에서 트랜잭션 내의 하나 이상의 저장 프로 시저로 호출을 롤백 할 수 있습니까?

처음에는 저장 프로 시저 내부에서 트랜잭션을 관리하는 것이 합리적이라고 생각했지만 단일 트랜잭션의 일부로 하나 이상의 저장 프로 시저 호출을 롤백해야한다면 C # 프로그램에서 수행해야합니다.

다른 사람이이를 수행하거나 대안에 대한 통찰력을 제공하는 방법에 대한 코드 스 니펫을 가르쳐 주시겠습니까?



Related