Example #1
0
        private static async Task <Tuple <bool, string> > EditOneAsync <T>(this AppDBContext db, DbSet <T> sets, EditType type = EditType.Add,
                                                                           T entity = null, Guid?id = null) where T : ISuper
        {
            var title = type.GetTitle();

            try
            {
                sets.EditDo <T>(type, new List <T> {
                    type != EditType.Remove ? entity : await sets.GetOneAsync <T>(id.Value)
                });
                await db.SaveChangesAsync();

                bool check = false;
                switch (type)
                {
                case EditType.Add: check = await sets.Where(i => i == entity).FirstOrDefaultAsync() != null; break;

                case EditType.Modify: check = await sets.Where(i => i.Id == id).FirstOrDefaultAsync() == entity; break;

                case EditType.Remove: check = await sets.Where(i => i.Id == id).FirstOrDefaultAsync() == null; break;
                }
                return(new Tuple <bool, string>(check, $"{title}{(check ? "成功" : "失败")}!"));
            }
            catch (Exception) { return(new Tuple <bool, string>(false, $"{title}失败!")); }
        }
Example #2
0
        private static async Task <Tuple <bool, string> > EditManyAsync <T>(this AppDBContext db, DbSet <T> sets, EditType type = EditType.Add,
                                                                            IEnumerable <T> entities = null, IEnumerable <Guid> ids = null, IEnumerable <Tuple <Guid, T> > ids_entities = null) where T : ISuper
        {
            var trans = await db.Database.BeginTransactionAsync();

            var title = type.GetTitle();

            try
            {
                List <T> es = new();
                switch (type)
                {
                case EditType.Add: es = entities.ToList(); break;

                case EditType.Modify:
                    foreach (var ie in ids_entities)
                    {
                        if ((await sets.GetOneNoTrackingAsync(ie.Item1)) != null)
                        {
                            es.Add(ie.Item2);
                        }
                    }
                    break;

                case EditType.Remove: es = sets.GetList <T>(i => ids.Contains(i.Id)).ToList(); break;
                }
                sets.EditDo <T>(type, es, true);
                await db.SaveChangesAsync();

                List <Guid> success = new();
                foreach (var i in es)
                {
                    switch (type)
                    {
                    case EditType.Add: if ((await sets.Where(j => j == i).FirstOrDefaultAsync()) != null)
                        {
                            success.Add(i.Id);
                        }
                        break;

                    case EditType.Modify: if ((await sets.Where(j => j.Id == i.Id).FirstOrDefaultAsync()) == i)
                        {
                            success.Add(i.Id);
                        }
                        break;

                    case EditType.Remove: if ((await sets.Where(j => j.Id == i.Id).FirstOrDefaultAsync()) == null)
                        {
                            success.Add(i.Id);
                        }
                        break;
                    }
                }
                var check = success.Count == (type == EditType.Add ? entities.Count() : (type == EditType.Modify ? ids_entities.Count() : ids.Count()));
                return(await trans.TransactionAsync(check, $"{title}{(check ? "" : "失败,数据回滚操作")}成功!"));
            }
            catch (Exception) { return(await trans.TransactionAsync(false, $"{title}失败,数据回滚操作成功!")); }
            // catch (Exception e) { return await trans.TransactionAsync(false, e.Message.ToString()); }
        }