Avatar
asoft
Člen
Avatar
asoft:

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:

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
Redaktor
Avatar
Milan Křepelka:

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

https://msdn.microsoft.com/…dio/bb738523(v=vs.100).aspx

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

Č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š:

Č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.