Beispiel #1
0
        public override ExecuteResultEntity <Manufacturers> Update(Manufacturers fromModel, bool isLastRecord = true)
        {
            try
            {
                using (var ManufacturersRepository = RepositoryHelper.GetManufacturersRepository(database))
                {
                    AccessLogRepository accesslog = RepositoryHelper.GetAccessLogRepository();
                    var LoginedUser = GetCurrentLoginUser();

                    var dbm = (from q in ManufacturersRepository.All()
                               where q.Id == fromModel.Id
                               select q).SingleOrDefault();

                    if (dbm != null)
                    {
                        CheckAndUpdateValue(fromModel, dbm);



                        var toDel    = dbm.Contacts.Select(s => s.Id).Except(fromModel.Contacts.Select(s => s.Id)).ToList();
                        var toAdd    = fromModel.Contacts.Select(s => s.Id).Except(dbm.Contacts.Select(s => s.Id)).ToList();
                        var samerows = dbm.Contacts.Select(s => s.Id).Intersect(fromModel.Contacts.Select(s => s.Id)).ToList();

                        Stack <Contacts> RemoveStack = new Stack <Contacts>();
                        Stack <Contacts> AddStack    = new Stack <Contacts>();

                        foreach (var delitem in toDel)
                        {
                            RemoveStack.Push(dbm.Contacts.Where(w => w.Id == delitem).Single());
                        }

                        foreach (var additem in toAdd)
                        {
                            AddStack.Push(fromModel.Contacts.Where(w => w.Id == additem).Single());
                        }

                        while (RemoveStack.Count > 0)
                        {
                            dbm.Contacts.Remove(RemoveStack.Pop());
                        }

                        while (AddStack.Count > 0)
                        {
                            dbm.Contacts.Add(AddStack.Pop());
                        }

                        foreach (var sameitem in samerows)
                        {
                            Contacts Source = fromModel.Contacts.Where(w => w.Id == sameitem).Single();
                            Contacts Target = dbm.Contacts.Where(w => w.Id == sameitem).Single();
                            CheckAndUpdateValue(Source, Target);
                        }
                    }

                    ManufacturersRepository.UnitOfWork.Commit();

                    accesslog.Add(new AccessLog()
                    {
                        ActionCode = (Byte)ActionCodes.Update,
                        CreateTime = DateTime.Now,
                        DataId     = dbm.Id.ToString("N"),
                        Reason     = "更新資料",
                        UserId     = LoginedUser.Result.UserId
                    });



                    var rtn = Query(w => w.Id == fromModel.Id);
                    return(ExecuteResultEntity <Manufacturers> .CreateResultEntity(rtn.Result.SingleOrDefault()));
                }
            }
            catch (Exception ex)
            {
                return(ExecuteResultEntity <Manufacturers> .CreateErrorResultEntity(ex));
            }
        }