Exemplo n.º 1
0
 public bool ExistInDb()
 {
     using (HlidacStatu.Lib.Db.Insolvence.InsolvenceEntities idb = new Db.Insolvence.InsolvenceEntities())
     {
         return(idb.Rizeni.Any(m => m.SpisovaZnacka == this.SpisovaZnacka));
     }
 }
Exemplo n.º 2
0
 public static IEnumerable <string> AllIdsFromDB()
 {
     //return AllIdsFromDB(null);
     using (Db.Insolvence.InsolvenceEntities db = new Db.Insolvence.InsolvenceEntities())
     {
         return(db.Rizeni.AsNoTracking().Select(m => m.SpisovaZnacka)
                .ToArray());//force query
     }
 }
Exemplo n.º 3
0
        public void SaveToDb(bool rewrite, bool skipOsobaIdLink = false)
        {
            PrepareForSave(skipOsobaIdLink);
            using (HlidacStatu.Lib.Db.Insolvence.InsolvenceEntities idb = new Db.Insolvence.InsolvenceEntities())
            {
                var  exists = idb.Rizeni.Where(m => m.SpisovaZnacka == this.SpisovaZnacka)?.ToList()?.FirstOrDefault();
                bool addNew = exists == null;

                if (exists != null && rewrite == true)
                {
                    foreach (var d in idb.Dokumenty.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList())
                    {
                        idb.Dokumenty.Remove(d);
                    }

                    foreach (var d in idb.Dluznici.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList())
                    {
                        idb.Dluznici.Remove(d);
                    }
                    foreach (var d in idb.Veritele.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList())
                    {
                        idb.Veritele.Remove(d);
                    }
                    foreach (var d in idb.Spravci.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList())
                    {
                        idb.Spravci.Remove(d);
                    }

                    idb.Rizeni.Remove(exists);

                    idb.SaveChanges();
                    addNew = true;
                }

                if (addNew)
                {
                    var r = new HlidacStatu.Lib.Db.Insolvence.Rizeni();
                    r.DatumZalozeni = this.DatumZalozeni ?? new DateTime(1990, 1, 1);
                    r.SpisovaZnacka = this.SpisovaZnacka;
                    r.OnRadar       = this.OnRadar;
                    r.PosledniZmena = this.PosledniZmena;
                    r.Soud          = this.Soud ?? "";
                    r.Stav          = this.Stav ?? "";

                    idb.Rizeni.Add(r);

                    foreach (var td in this.Dluznici)
                    {
                        var d = ToIOsoba <Dluznici>(td);
                        idb.Dluznici.Add(d);
                    }
                    foreach (var td in this.Veritele)
                    {
                        var d = ToIOsoba <Veritele>(td);
                        idb.Veritele.Add(d);
                    }
                    foreach (var td in this.Spravci)
                    {
                        var d = ToIOsoba <Spravci>(td);
                        idb.Spravci.Add(d);
                    }
                    foreach (var td in this.Dokumenty)
                    {
                        var d = ToDbDokument(td);
                        idb.Dokumenty.Add(d);
                    }
                }
                else // update existing
                {
                    var sameR = exists.DatumZalozeni == (this.DatumZalozeni ?? new DateTime(1990, 1, 1)) &&
                                exists.SpisovaZnacka == this.SpisovaZnacka &&
                                exists.OnRadar == this.OnRadar &&
                                exists.PosledniZmena == this.PosledniZmena &&
                                exists.Soud == (this.Soud ?? "") &&
                                exists.Stav == (this.Stav ?? "");

                    if (sameR == false)
                    {
                        exists.DatumZalozeni = (this.DatumZalozeni ?? new DateTime(1990, 1, 1));
                        exists.SpisovaZnacka = this.SpisovaZnacka;
                        exists.OnRadar       = this.OnRadar;
                        exists.PosledniZmena = this.PosledniZmena;
                        exists.Soud          = (this.Soud ?? "");
                        exists.Stav          = (this.Stav ?? "");
                    }

                    #region Dluznici
                    var dbDluznici = idb.Dluznici.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList();
                    //update existing
                    foreach (var d in this.Dluznici)
                    {
                        for (int i = 0; i < dbDluznici.Count(); i++)
                        {
                            var dd = dbDluznici[i];
                            if (d.IdOsoby == dd.IdOsoby && d.IdPuvodce == dd.IdPuvodce)
                            {
                                //same
                                if (!Validators.AreObjectsEqual(ToIOsoba <Dluznici>(d), dd, false, "pk"))
                                {
                                    dd = (Dluznici)UpdateIOsoba(d, dd);
                                }
                            }
                        }
                    }

                    if (this.Dluznici.Count() > dbDluznici.Count())
                    {
                        foreach (var d in this.Dluznici)
                        {
                            if (!dbDluznici.Any(m => m.IdOsoby == d.IdOsoby && m.IdPuvodce == d.IdPuvodce))
                            {
                                idb.Dluznici.Add(ToIOsoba <Dluznici>(d));
                            }
                        }
                    }

                    if (this.Dluznici.Count() < dbDluznici.Count())
                    {
                        //remove all and add orig
                        foreach (var d in dbDluznici)
                        {
                            idb.Dluznici.Remove(d);
                        }
                        foreach (var d in this.Dluznici)
                        {
                            idb.Dluznici.Add(ToIOsoba <Dluznici>(d));
                        }
                    }
                    #endregion

                    #region Veritele
                    var dbVeritele = idb.Veritele.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList();
                    //update existing
                    foreach (var d in this.Veritele)
                    {
                        for (int i = 0; i < dbVeritele.Count(); i++)
                        {
                            var dd = dbVeritele[i];
                            if (d.IdOsoby == dd.IdOsoby && d.IdPuvodce == dd.IdPuvodce)
                            {
                                //same
                                if (!Validators.AreObjectsEqual(ToIOsoba <Veritele>(d), dd, false, "pk"))
                                {
                                    dd = (Veritele)UpdateIOsoba(d, dd);
                                }
                            }
                        }
                    }

                    if (this.Veritele.Count() > dbVeritele.Count())
                    {
                        foreach (var d in this.Veritele)
                        {
                            if (!dbVeritele.Any(m => m.IdOsoby == d.IdOsoby && m.IdPuvodce == d.IdPuvodce))
                            {
                                idb.Veritele.Add(ToIOsoba <Veritele>(d));
                            }
                        }
                    }

                    if (this.Veritele.Count() < dbVeritele.Count())
                    {
                        //remove all and add orig
                        foreach (var d in dbVeritele)
                        {
                            idb.Veritele.Remove(d);
                        }
                        foreach (var d in this.Veritele)
                        {
                            idb.Veritele.Add(ToIOsoba <Veritele>(d));
                        }
                    }
                    #endregion

                    #region Spravci
                    var dbSpravci = idb.Spravci.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList();
                    //update existing
                    foreach (var d in this.Spravci)
                    {
                        for (int i = 0; i < dbSpravci.Count(); i++)
                        {
                            var dd = dbSpravci[i];
                            if (d.IdOsoby == dd.IdOsoby && d.IdPuvodce == dd.IdPuvodce)
                            {
                                //same
                                if (!Validators.AreObjectsEqual(ToIOsoba <Spravci>(d), dd, false, "pk"))
                                {
                                    dd = (Spravci)UpdateIOsoba(d, dd);
                                }
                            }
                        }
                    }

                    if (this.Spravci.Count() > dbSpravci.Count())
                    {
                        foreach (var d in this.Spravci)
                        {
                            if (!dbSpravci.Any(m => m.IdOsoby == d.IdOsoby && m.IdPuvodce == d.IdPuvodce))
                            {
                                idb.Spravci.Add(ToIOsoba <Spravci>(d));
                            }
                        }
                    }

                    if (this.Spravci.Count() < dbSpravci.Count())
                    {
                        //remove all and add orig
                        foreach (var d in dbSpravci)
                        {
                            idb.Spravci.Remove(d);
                        }
                        foreach (var d in this.Spravci)
                        {
                            idb.Spravci.Add(ToIOsoba <Spravci>(d));
                        }
                    }
                    #endregion

                    #region Dokumenty
                    if (System.Diagnostics.Debugger.IsAttached)
                    {
                        idb.Database.Log = Console.WriteLine;
                    }

                    var dbDokumenty = idb.Dokumenty.Where(m => m.RizeniId == exists.SpisovaZnacka).ToList();
                    //update existing
                    foreach (var d in this.Dokumenty)
                    {
                        for (int i = 0; i < dbDokumenty.Count(); i++)
                        {
                            var dd = dbDokumenty[i];
                            if (d.Id == dd.DokumentId)
                            {
                                //same
                                if (!Validators.AreObjectsEqual(ToDbDokument(d), dd, false))
                                {
                                    dd.DokumentId  = d.Id;
                                    dd.Length      = (int)d.Lenght;
                                    dd.Oddil       = d.Oddil;
                                    dd.Popis       = d.Popis;
                                    dd.TypUdalosti = d.TypUdalosti;
                                    dd.Url         = d.Url;
                                    dd.WordCount   = (int)d.WordCount;
                                }
                            }
                        }
                    }

                    if (this.Dokumenty.Count() > dbDokumenty.Count())
                    {
                        foreach (var d in this.Dokumenty)
                        {
                            if (!dbDokumenty.Any(m => m.DokumentId == d.Id))
                            {
                                idb.Dokumenty.Add(ToDbDokument(d));
                            }
                        }
                    }

                    if (this.Dokumenty.Count() < dbDokumenty.Count())
                    {
                        foreach (var d in dbDokumenty)
                        {
                            if (!this.Dokumenty.Any(m => m.Id == d.DokumentId))
                            {
                                idb.Dokumenty.Remove(d);
                            }
                        }
                    }
                    #endregion
                }



                try
                {
                    if (idb.ChangeTracker.HasChanges())
                    {
                        HlidacStatu.Util.Consts.Logger.Info($"Updating Rizeni into DB {this.SpisovaZnacka}, {idb.ChangeTracker.Entries().Count(m => m.State != System.Data.Entity.EntityState.Unchanged)} changes.");
                    }
                    idb.Database.CommandTimeout = 120;
                    idb.SaveChanges();
                }

                catch (DbEntityValidationException e)
                {
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();

                    foreach (var eve in e.EntityValidationErrors)
                    {
                        sb.AppendFormat(@"Entity of type ""{0}"" in state ""{1}"" 
                   has the following validation errors:\n",
                                        eve.Entry.Entity.GetType().Name,
                                        eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            sb.AppendFormat(@"- Property: ""{0}"", Error: ""{1}""\n",
                                            ve.PropertyName, ve.ErrorMessage);
                        }
                    }
                    Debug.WriteLine(sb.ToString());

                    throw new DbEntityValidationException(sb.ToString(), e);
                }
                catch (DbUpdateException e)
                {
                    //Add your code to inspect the inner exception and/or
                    //e.Entries here.
                    //Or just use the debugger.
                    //Added this catch (after the comments below) to make it more obvious
                    //how this code might help this specific problem
                    throw;
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.Message);
                    throw;
                }
            }
        }