Browse Source

added transaction on crud delete; tests

tags/v0.3.0
Robin Thoni 7 years ago
parent
commit
0d148ffc03

+ 100
- 55
Luticate2.Utils/DataAccess/LuEfCrudDataAccess.cs View File

114
 
114
 
115
 
115
 
116
 
116
 
117
+        protected virtual LuResult<T> _Add<T>(TDboCreate obj, TDbContext db, DbSet<TModel> table)
118
+        {
119
+            return LuResult<T>.Ok(default(T));
120
+        }
117
 
121
 
118
         public virtual LuResult<T> Add<T>(IEnumerable<TDboCreate> objs, Func<IEnumerable<TDboRead>, T> returnFunc)
122
         public virtual LuResult<T> Add<T>(IEnumerable<TDboCreate> objs, Func<IEnumerable<TDboRead>, T> returnFunc)
119
         {
123
         {
120
-            var models = objs.Select(GetModelFromTCreate).ToList();
124
+            var models = new List<TModel>();
121
             var addRes = Execute((db, table) =>
125
             var addRes = Execute((db, table) =>
122
             {
126
             {
123
-                table.AddRange(models);
127
+                var transact = BeginTransaction(db);
128
+                foreach (var dbo in objs)
129
+                {
130
+                    var model = GetModelFromTCreate(dbo);
131
+                    table.Add(model);
132
+                    models.Add(model);
133
+                    var res = _Add<T>(dbo, db, table);
134
+                    if (!res)
135
+                    {
136
+                        return res;
137
+                    }
138
+                }
124
                 db.SaveChanges();
139
                 db.SaveChanges();
125
                 foreach (var model in models)
140
                 foreach (var model in models)
126
                 {
141
                 {
127
                     db.Entry(model).State = EntityState.Detached;
142
                     db.Entry(model).State = EntityState.Detached;
128
                 }
143
                 }
144
+                CommitTransaction(transact);
129
                 return LuResult<T>.Ok(default(T));
145
                 return LuResult<T>.Ok(default(T));
130
             });
146
             });
131
             if (!addRes)
147
             if (!addRes)
304
 
320
 
305
 
321
 
306
 
322
 
307
-        public virtual LuResult<T> Edit<T>(Expression<Func<TModel, bool>> predicate, Action<TModel> update,
308
-            Func<IEnumerable<TDboRead>, T> returnFunc)
323
+
324
+//        public virtual LuResult<T> Edit<T>(Expression<Func<TModel, bool>> predicate, Action<TModel> update,
325
+//            Func<IEnumerable<TDboRead>, T> returnFunc)
326
+//        {
327
+//            IList<TModel> models = null;
328
+//            var editRes = Execute((db, table) =>
329
+//            {
330
+//                models = GetEditQueryable(db, table).Where(predicate).AsNoTracking().ToList();
331
+//                foreach (var model in models)
332
+//                {
333
+//                    update(model);
334
+//                    db.Entry(model).State = EntityState.Modified;
335
+//                }
336
+//                db.SaveChanges();
337
+//                return LuResult<T>.Ok(default(T));
338
+//            });
339
+//            if (!editRes)
340
+//            {
341
+//                return editRes;
342
+//            }
343
+//            return GetMultiple(models, returnFunc);
344
+//        }
345
+//
346
+//        public virtual LuResult<IEnumerable<TId>> EditId(Expression<Func<TModel, bool>> predicate, Action<TModel> update)
347
+//        {
348
+//            var func = GetIdFunc<TId>();
349
+//            return Edit(predicate, update, reads => reads.Select(func));
350
+//        }
351
+//
352
+//        public virtual LuResult<IEnumerable<TDboRead>> EditDbo(Expression<Func<TModel, bool>> predicate, Action<TModel> update)
353
+//        {
354
+//            return Edit(predicate, update, read => read);
355
+//        }
356
+
357
+
358
+//        public virtual LuResult<T> EditSingleById<T>(TId id, Action<TModel> update, Func<TDboRead, T> returnFunc)
359
+//        {
360
+//            var guid = GetId(id);
361
+//            if (guid == null)
362
+//            {
363
+//                return GetNotFoundResult<T>();
364
+//            }
365
+//            return Edit(GetExpression(new KeyValuePair<string, object>("id", guid)), update,
366
+//                list => returnFunc(list.FirstOrDefault()));
367
+//        }
368
+//
369
+//        public virtual LuResult<TId> EditSingleByIdId(TId id, Action<TModel> update)
370
+//        {
371
+//            return EditSingleById(id, update, GetIdFunc<TId>());
372
+//        }
373
+//
374
+//        public virtual LuResult<TDboRead> EditSingleByIdDbo(TId id, Action<TModel> update)
375
+//        {
376
+//            return EditSingleById(id, update, read => read);
377
+//        }
378
+
379
+        protected virtual LuResult<T> _EditSingleById<T>(TId id, TModel model, TDboUpdate obj, TDbContext db, DbSet<TModel> table)
380
+        {
381
+            return LuResult<T>.Ok(default(T));
382
+        }
383
+
384
+        public virtual LuResult<T> EditSingleById<T>(TId id, TDboUpdate update, Func<TDboRead, T> returnFunc)
309
         {
385
         {
310
-            IList<TModel> models = null;
386
+            var guid = GetId(id);
387
+            if (guid == null)
388
+            {
389
+                return GetNotFoundResult<T>();
390
+            }
391
+            var transact = BeginTransaction(null);
311
             var editRes = Execute((db, table) =>
392
             var editRes = Execute((db, table) =>
312
             {
393
             {
313
-                models = GetEditQueryable(db, table).Where(predicate).AsNoTracking().ToList();
314
-                foreach (var model in models)
394
+                var model = GetEditQueryable(db, table).FirstOrDefault(GetExpression(new KeyValuePair<string, object>("id", guid)));
395
+                EditModelFromTUpdate(update, model);
396
+                var res = _EditSingleById<T>(id, model, update, db, table);
397
+                if (!res)
315
                 {
398
                 {
316
-                    update(model);
317
-                    db.Entry(model).State = EntityState.Modified;
399
+                    RollbackTransaction(transact);
400
+                    return res;
318
                 }
401
                 }
402
+                db.Entry(model).State = EntityState.Modified;
319
                 db.SaveChanges();
403
                 db.SaveChanges();
320
                 return LuResult<T>.Ok(default(T));
404
                 return LuResult<T>.Ok(default(T));
321
             });
405
             });
322
             if (!editRes)
406
             if (!editRes)
323
             {
407
             {
408
+                RollbackTransaction(transact);
324
                 return editRes;
409
                 return editRes;
325
             }
410
             }
326
-            return GetMultiple(models, returnFunc);
327
-        }
328
-
329
-        public virtual LuResult<IEnumerable<TId>> EditId(Expression<Func<TModel, bool>> predicate, Action<TModel> update)
330
-        {
331
-            var func = GetIdFunc<TId>();
332
-            return Edit(predicate, update, reads => reads.Select(func));
333
-        }
334
-
335
-        public virtual LuResult<IEnumerable<TDboRead>> EditDbo(Expression<Func<TModel, bool>> predicate, Action<TModel> update)
336
-        {
337
-            return Edit(predicate, update, read => read);
338
-        }
339
-
340
-
341
-        public virtual LuResult<T> EditSingleById<T>(TId id, Action<TModel> update, Func<TDboRead, T> returnFunc)
342
-        {
343
-            var guid = GetId(id);
344
-            if (guid == null)
345
-            {
346
-                return GetNotFoundResult<T>();
347
-            }
348
-            return Edit(GetExpression(new KeyValuePair<string, object>("id", guid)), update,
349
-                list => returnFunc(list.FirstOrDefault()));
350
-        }
351
-
352
-        public virtual LuResult<TId> EditSingleByIdId(TId id, Action<TModel> update)
353
-        {
354
-            return EditSingleById(id, update, GetIdFunc<TId>());
355
-        }
356
-
357
-        public virtual LuResult<TDboRead> EditSingleByIdDbo(TId id, Action<TModel> update)
358
-        {
359
-            return EditSingleById(id, update, read => read);
360
-        }
361
-
362
-
363
-        public virtual LuResult<T> EditSingleById<T>(TId id, TDboUpdate update, Func<TDboRead, T> returnFunc)
364
-        {
365
-            var guid = GetId(id);
366
-            if (guid == null)
367
-            {
368
-                return GetNotFoundResult<T>();
369
-            }
370
-            return Edit(GetExpression(new KeyValuePair<string, object>("id", guid)),
371
-                model => EditModelFromTUpdate(update, model), list => returnFunc(list.FirstOrDefault()));
411
+            var getRes = GetSingleById(id).To(returnFunc);
412
+            CommitTransaction(transact);
413
+            return getRes;
372
         }
414
         }
373
 
415
 
374
         public virtual LuResult<TId> EditSingleByIdId(TId id, TDboUpdate update)
416
         public virtual LuResult<TId> EditSingleByIdId(TId id, TDboUpdate update)
389
         {
431
         {
390
             return Execute((db, table) =>
432
             return Execute((db, table) =>
391
             {
433
             {
434
+                var transact = BeginTransaction(db);
392
                 var models = GetDeleteQueryable(db, table).Where(predicate).AsNoTracking().ToList();
435
                 var models = GetDeleteQueryable(db, table).Where(predicate).AsNoTracking().ToList();
393
                 var getRes = GetMultiple(models, returnFunc);
436
                 var getRes = GetMultiple(models, returnFunc);
394
                 if (!getRes)
437
                 if (!getRes)
395
                 {
438
                 {
439
+                    RollbackTransaction(transact);
396
                     return getRes;
440
                     return getRes;
397
                 }
441
                 }
398
                 table.RemoveRange(models);
442
                 table.RemoveRange(models);
399
                 db.SaveChanges();
443
                 db.SaveChanges();
444
+                CommitTransaction(transact);
400
                 return getRes;
445
                 return getRes;
401
             });
446
             });
402
         }
447
         }

+ 507
- 508
TestUtils/EfCrudDataAccess/LuEfUpdateDataAccessTest.cs
File diff suppressed because it is too large
View File


Loading…
Cancel
Save