NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: ASP.NET MVC a transakcie

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
asoft
Člen
Avatar
asoft:20.9.2015 17:41

Ahoj.
Asp.net MVC, c#, EF 6

Ako správne použiť pri zápise do databázy pomocou EF:

  1. try a catch (niekde som videl, že sa používa len pri SaveChanges();)
  2. Transaction: using (var transaction = new System.Transac­tions.Transac­tionScope())

    V niektorých článkoch som čítal, že sa nemajú používať transakcie, pretože SaveChanges() si to ošetrí

    samo. Dokonca, že to môže spôsobiť problémy.

  3. Using()
if (ModelState.IsValid)
{
   try
   {
      using (Test_Context  test_context  = new Test_Context ())
      {
         Uzivatel aaa = new Uzivatel
         {
            Uziv_ParZnak = "  1",
            Uziv_Meno = "Meno",
         };

         test_context.Uzivatelia..Add(aaa);
         test_context.SaveChanges();
      }
   }
   catch
   {
   kod.......
   }
}
 
Odpovědět
20.9.2015 17:41
Avatar
asoft
Člen
Avatar
Odpovídá na asoft
asoft:20.9.2015 18:52

Našiel so nejaké info a po úprave to aj funguje.
Ale neviem, či je to aj metodicky správne.

if (ModelState.IsValid)
{
   using (Test_Context test_context = new Test_Context())
   {
      using (var dbContextTransaction = test_context.Database.BeginTransaction())
      {
         try
         {
            Uzivatel aaa = new Uzivatel
            {
               Uziv_ParZnak = "  1",
               Uziv_Meno = "Meno"
            };
            test_context.Uzivatelia.Add(aaa);
            test_context.SaveChanges();
            dbContextTransaction.Commit();
         }
         catch (Exception)
         {
            dbContextTransaction.Rollback();
         }
      }
   }
}
 
Nahoru Odpovědět
20.9.2015 18:52
Avatar
Milan Křepelka
Tvůrce
Avatar
Milan Křepelka:21.9.2015 10:19

Myslím, že to je v pohodě. A v pohodě by to bylo i bez toho vrchního usingu.

https://msdn.microsoft.com/…vs.100).aspx

 
Nahoru Odpovědět
21.9.2015 10:19
Avatar
Odpovídá na asoft
Andrej Farkaš:21.9.2015 10:27

Čo som naposledy robil s MVC a EF, tak sa mi naozaj marí, že sa commit volal až pri SaveChanges. Keď sa nezavolal, tak zmeny nenastali.

Nahoru Odpovědět
21.9.2015 10:27
Live. Love. Learn.
Avatar
Andrej Farkaš:21.9.2015 10:48

Čo sa týka otázky č. 1, tak si videl to používať try-catch len pri SaveChanges() práve preto, že až vtedy sa posunú zmeny a až vtedy môžu nastať nejaké databázové / validačné chyby.

Nahoru Odpovědět
21.9.2015 10:48
Live. Love. Learn.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.