MS .NET рдореЗрдВ рд╡рд┐рд╖рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдореБрдЭрд╕реЗ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВрдиреЗ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХрд╛ рд╕рдореНрдорд┐рд▓рди / рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдерд╛, рдмрд╢рд░реНрддреЗ:

  1. рдПрдХрд▓ рд▓реЗрди-рджреЗрдиред
  2. рдпрд╣ Oracle, MS SQL Server рдФрд░ PostgreSQL рдЬреИрд╕реЗ рдХрдИ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  3. рдПрдХ CRUD рдСрдкрд░реЗрд╢рди рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреА рд╣реИред
  4. рд╕рдореНрдорд┐рд▓рди рдЕрдиреБрдХреНрд░рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдкреНрд░рд╢реНрди рдкреВрдЫрдХрд░ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛? рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдпрд╛ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдкреНрд░рд╢реНрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреА, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБ, рдЖрдЗрдП рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ Microsoft рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ 1ред C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ ODBC рдбреНрд░рд╛рдЗрд╡рд░ (SQL рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди рдХреЗ рд▓рд┐рдП Microsoft рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрдЯреЗрдб рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯрд░ (MSDTC) рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓рд╛)

Microsoft рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрдЯреЗрдб рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯрд░ (MSDTC) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ SQL рд╕рд░реНрд╡рд░ рдХреЗ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдореЗрдВ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдпрд╛ рд╡рд┐рддрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рддрд░рд┐рдд рд▓реЗрди-рджреЗрди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рджреЛ рдЙрджрд╛рд╣рд░рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдВред

MSDTC рдХреЗрд╡рд▓ Microsoft SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ Microsoft Azure SQL рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

MSDTC рдХреЛ SQL рд╕рд░реНрд╡рд░ рдиреЗрдЯрд┐рд╡ рдХреНрд▓рд╛рдЗрдВрдЯ рдбреНрд░рд╛рдЗрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдУрдкрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА (ODBC) рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХрд╛ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕реА рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рдЧреНрд░рд╛рд╣рдХ ODBC рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдкрд╛рд╕ XA рдУрдкрди рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрдЯреЗрдб рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ (DTP) рдЕрдиреБрд░реВрдк рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ рд╣реИред рдпрд╣ рдЕрдиреБрдкрд╛рд▓рди MSDTC рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рд╕рднреА рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрди рдЖрджреЗрд╢ рдореВрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕ ODBC рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдиреБрдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

рдПрдХ рдореВрд▓ C ++ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ ODBC рдЕрдиреБрдкреНрд░рдпреЛрдЧ SQLSetConnectAttr рдХреЛ рдСрдЯреЛ-рдХрдо рд╡рд┐рдХрд▓рд╛рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдХреЗ рдПрдХ рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ SQL рд╕рд░реНрд╡рд░ X рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИ
ред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдВрдкреНрдпреВрдЯрд░ B рдкрд░ SQL рд╕рд░реНрд╡рд░ X рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЕрджреНрдпрддрди SQL Server Y рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ SQL рд╕рд░реНрд╡рд░ рдХреЗ рджреЛрдиреЛрдВ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдореЗрдВ рд╕рднреА рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдЕрджреНрдпрддрди рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди SQL_COMMIT рдпрд╛ SQL_ROLLBACK рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде SQLEndTran (1) рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

(1) MSDTC рдХреЛ ODBC рдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, MSDTC рдПрдХ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм SQLEndTran рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рддрд░рдг рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдореВрд▓ C ++ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ ODBC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдореЗрдВ рдирд╛рдорд╛рдВрдХрд┐рдд рд╣реИред рдлрд┐рд░ рдЖрд╡реЗрджрди рджреВрд╕рд░реЗ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдЬрдорд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, SQL рд╕рд░реНрд╡рд░ рдореВрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ ODBC рдбреНрд░рд╛рдЗрд╡рд░ рдореВрд▓ рд╡рд┐рддрд░рд┐рдд рд▓реЗрди-рджреЗрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдирдП рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред

MSDTC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВ редред

рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ 2ред Azur рдХреНрд▓рд╛рдЙрдб рдореЗрдВ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ C # рдПрдкреНрд▓рд┐рдХреЗрд╢рди,

MSDTC рдХреЛ Azure SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ Azure SQL рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ C # рдкреНрд░реЛрдЧреНрд░рд╛рдо .NET System.Transactions.Transaction.TransactionScope рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓реЗрди-рджреЗрди рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TransactionScope рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ ред

static public int CreateTransactionScope(
    string connectString1, string connectString2,
    string commandText1, string commandText2)
{
    //        StringWriter   
   // .
    int returnValue = 0;
    System.IO.StringWriter writer = new System.IO.StringWriter();

    try
    {
        //  TransactionScope   , 
        //            
        //  .
        using (TransactionScope scope = new TransactionScope())
        {
            using (SqlConnection connection1 = new SqlConnection(connectString1))
            {
                //      
                // TransactionScope   .
                connection1.Open();

                //   SqlCommand    .
                SqlCommand command1 = new SqlCommand(commandText1, connection1);
                returnValue = command1.ExecuteNonQuery();
                writer.WriteLine("   command1: {0}", returnValue);

                //      ,  ,  
                //  command1  .  
                //    using  connection2   connection1, 
                //         connection2 
                //      .   
                using (SqlConnection connection2 = new SqlConnection(connectString2))
                {
                    //       
                    //   connection2 .
                    connection2.Open();

                    //      .
                    returnValue = 0;
                    SqlCommand command2 = new SqlCommand(commandText2, connection2);
                    returnValue = command2.ExecuteNonQuery();
                    writer.WriteLine("    command2: {0}", returnValue);
                }
            } 
            scope.Complete();
        }
    }
    catch (TransactionAbortedException ex)
    {
        writer.WriteLine("   : {0}", ex.Message);
    }

    Console.WriteLine(writer.ToString());

    return returnValue;
}

рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ 3ред рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП C # рдФрд░ рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рджрд╛рддрд╛ рд▓реЗрдирджреЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ SaveChanges () рдореЗрдВ рдПрдХ рдХреЙрд▓ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд▓реЗрдирджреЗрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓реЗрдирджреЗрди рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ SaveChanges () рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЗрди-рджреЗрди рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВред

рдЖрдк DbContext.Database API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВрд▓реЗрди-рджреЗрди рд╢реБрд░реВ рдХрд░рдиреЗ, рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдФрд░ рд▓реЗрди-рджреЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджреЛ SaveChanges () рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдПрдХ рдПрдХрд▓ рд▓реЗрдирджреЗрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд LINQ рдХреНрд╡реЗрд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ ред

рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рджрд╛рддрд╛ рд▓реЗрдирджреЗрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрди-рджреЗрди рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдкреНрд░рджрд╛рддрд╛ рд▓реЗрдирджреЗрди рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

using (var context = new BloggingContext())
{
    using (var transaction = context.Database.BeginTransaction())
    {
        try
        {
            context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
            context.SaveChanges();

            context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" });
            context.SaveChanges();

            var blogs = context.Blogs
                .OrderBy(b => b.Url)
                .ToList();

           transaction.Commit();
        }
        catch (Exception)
        {
             
        }
    }
}

рдпрджрд┐ рдЖрдк .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ EF Core рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ System.Transactions рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдордВрдЪ рдФрд░ Microsoft рдЙрддреНрдкрд╛рдж рд▓рд╛рдЗрди рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ: MSDTC, рдХреНрд▓рд╛рдЙрдб рд╕реНрд╡рдпрдВ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рд╣реИ, рд╡рд┐рджреЗрд╢реА рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП ADO .NET + EF рдХреЛрд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ ( рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВ )ред

Microsoft рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд▓реЗрдирджреЗрди рдХреА рд╕рдореАрдХреНрд╖рд╛ рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ? рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рд╣реИ рдХрд┐ .NET рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╡рд┐рд╖рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреЛрдИ рдорд╛рдирдХ рдЯреВрд▓рдХрд┐рдЯ рдирд╣реАрдВ рд╣реИред

рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрд░-рдирд┐рд░реНрдорд┐рдд рд╕рдордиреНрд╡рд┐рдд рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рд╕рдордиреНрд╡рдпрдХ (рд╕реАрдЖрд░рдЯреА) рдмрдирд╛рддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛рдЗрд╕ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓реЗрдирджреЗрди рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓реЗрди-рджреЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рдЧрдВрднреАрд░ рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдорд╕реАрдЯреА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЕрджреНрдпрддрди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдмрдирд╛рдирд╛ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдорд╛рд╕реНрдЯрд░ рдбреЗрдЯрд╛рдмреЗрд╕ (рдпрд╛ рддрд╛рд▓рд┐рдХрд╛) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд▓реЗрдирджреЗрди рд░рд┐рдХреЙрд░реНрдб рд╣реИред CRT рдХрд╛ рдпрд╣ рдореЙрдбрд▓ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  • atomicity
  • рдЬреБрдЯрдирд╛
  • рдПрдХрд╛рдВрдд
  • рд▓рдВрдмреА рдЙрдореНрд░

- рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдпрд╛ рд╣реИ, рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╢рдХреНрддрд┐ рдЖрдЙрдЯреЗрдЬ рд╣реЛрдиреЗ рдкрд░ рдЖрд░реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд▓ рдореЗрдВ рд▓реЗрдирджреЗрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдЖрд░реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ (рдореИрдкрд┐рдВрдЧ) рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдо XML / JSON рдкреНрд░рд╛рд░реВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝реЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдпрд╛ рд▓реЗрдирджреЗрди рд░рд┐рдХреЙрд░реНрдб (рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдбреАрдПрд▓рдПрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреА рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдХреЛрдб рд╕реНрддрд░ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред (рдФрд░ рд╣рд╛рдВ, рдПрд╕рдЖрд░рдЯреА рдХрд╛ рдорддрд▓рдм рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рд╣реИред)

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╕рд░рд▓ рд░реВрдк рдореЗрдВ рдПрд╕рдЖрд░рдЯреА рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрд╡реЗрджрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ рдПрдХ рдЕрд▓рдЧ, рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИ)ред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рд╡рд┐рддрд░рд┐рдд рд▓реЗрди-рджреЗрди, рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реВрдЪрдирд╛ рдХреЗ рдПрдХ-рдмрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЛ рдЗрд╕реЗ рдмрджрд▓реЗ рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рдеред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдиреНрдп рдЖрдзрд╛рд░реЛрдВ рдкрд░ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдВрддрд░рд┐рдХ рдорд╛рдорд▓реЛрдВ рдХреЗ рдордВрддреНрд░рд╛рд▓рдп, рдПрдлрдПрд╕рдмреА рдФрд░ рдмреАрдорд╛ рдХрдВрдкрдирд┐рдпреЛрдВ, рдЬрдм рдЕрд╕реНрдкрддрд╛рд▓ рдХреЗ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдХрдХреНрд╖ (рдмреБрд▓реЗрдЯ рдШрд╛рд╡) рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдПрдХ рд╣реА рддрдВрддреНрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рддреНрддреАрдп рд╕рдВрд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛, рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВ!

All Articles