Esempio n. 1
0
        public override void Update(Invoice entity)
        {
            using (var ctx = _databasefactory.Get())
            {
                var inv = ctx.Invoice.Where(i => i.InvoiceId == entity.InvoiceId)
                          .Include(d => d.InvoiceDetail)
                          .Include(it => it.InvoiceItems)
                          .FirstOrDefault();

                ctx.Entry(inv).CurrentValues.SetValues(entity);
                if (inv.InvoiceDetail != null)
                {
                    ctx.Entry(inv.InvoiceDetail).CurrentValues.SetValues(entity.InvoiceDetail);
                }

                // Delete children
                foreach (var existingChild in inv.InvoiceItems)
                {
                    if (!entity.InvoiceItems.Any(c => c.Id == existingChild.Id))
                    {
                        ctx.InvoiceItem.Remove(existingChild);
                    }
                }
                foreach (var item in entity.InvoiceItems)
                {
                    var existingChild = inv.InvoiceItems.Where(c => c.Id == item.Id).SingleOrDefault();
                    //update children
                    if (existingChild != null)
                    {
                        ctx.Entry(existingChild).CurrentValues.SetValues(item);
                    }
                    //add new children
                    else
                    {
                        inv.InvoiceItems.Add(item);
                    }
                }
                // ctx.SaveChanges();
            }
        }
Esempio n. 2
0
        public override void Update(Business entity)
        {
            using (var ctx = _databasefactory.Get())
            {
                //get business entity from the DB based on Id
                var bus = ctx.Business.Where(b => b.BusinessId == entity.BusinessId).
                          Include(a => a.BusinessAddress).
                          Include(s => s.Sender).
                          Include(p => p.Periods).Where(pe => pe.BusinessId == entity.BusinessId)
                          .FirstOrDefault();
                //reset the db entity values to new values
                ctx.Entry(bus).CurrentValues.SetValues(entity);
                if (bus.Sender != null)
                {
                    ctx.Entry(bus.Sender).CurrentValues.SetValues(entity.Sender);
                }
                var existingPeriod = (PeriodData)null;
                foreach (var period in entity.Periods)
                {
                    existingPeriod = bus.Periods.Where(p => p.PeriodrefId == period.PeriodrefId).SingleOrDefault();
                    //update children
                    if (existingPeriod != null)
                    {
                        ctx.Entry(existingPeriod).CurrentValues.SetValues(period);
                        if (period.VAT100 != null) //check entity object and add explicityly
                        {
                            if (existingPeriod.VAT100 == null)
                            {
                                existingPeriod.VAT100 = period.VAT100;
                            }
                            else
                            {
                                ctx.Entry(existingPeriod.VAT100).CurrentValues.SetValues(period.VAT100);
                            }
                        }
                        foreach (var resp in period.HmrcResponses)
                        {
                            var existingChild = existingPeriod.HmrcResponses.Where(c => c.HMRCResponseId == resp.HMRCResponseId).SingleOrDefault();
                            //update children
                            if (existingChild != null)
                            {
                                ctx.Entry(existingChild).CurrentValues.SetValues(resp);
                            }
                            //add new children
                            else
                            {
                                existingPeriod.HmrcResponses.Add(resp);
                            }
                        }
                        // bus.Periods.Add(existingPeriod);
                    }
                    //if period is new add period to bus entity but need to add responses to the period before adding to  bu
                    else
                    {
                        //foreach (var response in period.HmrcResponses)
                        //{
                        //var existingResponse = existingPeriod.HmrcResponses.Any(h => h.HMRCResponseId == response.HMRCResponseId);
                        //if(existingResponse)
                        //{
                        //    ctx.Entry(response).CurrentValues.SetValues(response);
                        //}
                        //else
                        //{
                        //existingPeriod.HmrcResponses.Add(response);
                        bus.Periods.Add(period);
                        //}
                        //}
                    }
                }


                ctx.SaveChanges();
            }
        }
Esempio n. 3
0
 public UnitOfWork(IDataBaseFactory dbFactory, string connectionString)
 {
     _context = dbFactory.Get(connectionString);
 }
Esempio n. 4
0
        public override void Update(PeriodData entity)
        {
            using (var ctx = _databasefactory.Get())
            {
                var per = ctx.PeriodData.Where(p => p.PeriodId == entity.PeriodId).
                          Include(v => v.VAT100)
                          .Include(h => h.HmrcResponses).Where(h => h.PeriodId == entity.PeriodId)
                          .FirstOrDefault();
                if (per != null)
                {
                    ctx.Entry(per).CurrentValues.SetValues(entity);
                    if (per.VAT100 != null)
                    {
                        ctx.Entry(per.VAT100).CurrentValues.SetValues(entity.VAT100);
                    }
                    else
                    {
                        per.VAT100 = entity.VAT100;
                    }                                    //just forcing set values as in some occasions the above statement set VAT100 to null in the per object
                                                         // Delete children
                    foreach (var existingChild in per.HmrcResponses)
                    {
                        if (!entity.HmrcResponses.Any(c => c.HMRCResponseId == existingChild.HMRCResponseId))
                        {
                            ctx.HMRCResponse.Remove(existingChild);
                        }
                    }
                    foreach (var resp in entity.HmrcResponses)
                    {
                        var existingChild = per.HmrcResponses.Where(c => c.HMRCResponseId == resp.HMRCResponseId).SingleOrDefault();
                        //update children
                        if (existingChild != null)
                        {
                            ctx.Entry(existingChild).CurrentValues.SetValues(resp);
                        }
                        //add new children
                        else
                        {
                            per.HmrcResponses.Add(resp);
                        }
                    }
                }
                else
                {
                    ctx.PeriodData.Add(entity);
                }
                //add or update business related entity here before savig the DBContext as its single request per entity the context is disposing if we try another request from controller
                //var bus = ctx.Business.Where(b => b.BusinessId == bvmEntity.BusinessId).Include(bd => bd.BusinessAddress).FirstOrDefault();
                //if (bus!=null)
                //{
                //    ctx.Entry(bus).CurrentValues.SetValues(bvmEntity);
                //}
                try
                {
                    // Your code...
                    // Could also be before try if you know the exception occurs in SaveChanges

                    ctx.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                          eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                              ve.PropertyName, ve.ErrorMessage);
                        }
                    }
                    throw;
                }
            }
        }
Esempio n. 5
0
 public DutUserStore(IDataBaseFactory context) : base(context.Get())
 {
 }