Ejemplo n.º 1
0
        static DBInitializer()
        {
            DefaultCRUDRepository <TestContext, ReferenceModel> .
            DeclareProjection(m => new ReferenceType
            {
                AMonth  = Month.FromDateTime(m.AMonth),
                ANMonth = Month.FromDateTime(m.ANMonth.Value),
                AWeek   = Week.FromDateTime(m.AWeek),
                ANWeek  = Week.FromDateTime(m.ANWeek.Value)
            });

            DefaultCRUDRepository <TestContext, ReferenceModel> .
            DeclareProjection <IFilterReferenceTypeWithChildren>(m => new ReferenceTypeWithChildren
            {
                AMonth   = Month.FromDateTime(m.AMonth),
                ANMonth  = Month.FromDateTime(m.ANMonth.Value),
                AWeek    = Week.FromDateTime(m.AWeek),
                ANWeek   = Week.FromDateTime(m.ANWeek.Value),
                Children = m.Children.Select(l => new NestedReferenceType {
                })
            });

            DefaultCRUDRepository <TestContext, ReferenceModel> .
            DeclareProjection <ReferenceTypeWithChildren>(m => new ReferenceTypeWithChildren
            {
                AMonth   = Month.FromDateTime(m.AMonth),
                ANMonth  = Month.FromDateTime(m.ANMonth.Value),
                AWeek    = Week.FromDateTime(m.AWeek),
                ANWeek   = Week.FromDateTime(m.ANWeek.Value),
                Children = m.Children.Select(l => new NestedReferenceType {
                })
            });
        }
        public async Task Delete()
        {
            var    tempC = new TestContext();
            Person test;

            tempC.Persons.Add(test = new Person {
                Name    = "DeleteTestName",
                Surname = "DeleteTestSurName",
            });
            tempC.SaveChanges();
            var id = test.Id;

            tempC.Dispose();
            tempC = new TestContext();
            var repo = new DefaultCRUDRepository <TestContext, Person>(tempC, tempC.Persons);

            repo.Delete <int>(id);
            await repo.SaveChanges();

            tempC.Dispose();
            tempC = new TestContext();
            repo  = new DefaultCRUDRepository <TestContext, Person>(tempC, tempC.Persons);
            var deleted = await repo.GetById <PersonDTOFlattenedAuto, int>(id);

            Assert.Null(deleted);

            id = tempC.Persons.Where(m => m.Id == id)
                 .Select(m => m.Id)
                 .SingleOrDefault();
            tempC.Dispose();
            Assert.Equal(id, 0);
        }
        static DetailTestController()
        {
            DefaultCRUDRepository <ApplicationDbContext, Product>
            .DeclareProjection <ProductViewModelDetail>(
                m => m.Maintenance != null?
                new ProductMaintenanceViewModelDetail
            {
                //DateValid = m.DateValid == null ? null : (Month?)Month.FromDateTime(m.DateValid.Value),
                MaintenanceYearlyRate = (decimal)m.Maintenance.YearlyRate,
                DateValid             = m.DateValid == null ? null : (Month?)Month.FromDateTime(m.DateValid.Value)
            } :
                new ProductViewModelDetail
            {
                DateValid = m.DateValid == null ? null : (Month?)Month.FromDateTime(m.DateValid.Value)
            }

                );

            DefaultCRUDRepository <ApplicationDbContext, ProductType>
            .DeclareProjection <DisplayValue>(
                m => new DisplayValue
            {
                Value   = m.Id,
                Display = m.Name
            });
        }
 public GridTestController(
     Data.ApplicationDbContext db,
     IStringLocalizerFactory factory,
     IHttpContextAccessor accessor,
     IWebQueryProvider queryProvider) : base(factory, accessor)
 {
     //in actual 3 layers applications repository inherit
     //from DefaultCRUDRepository
     //and then it is DI injected
     Repository         = DefaultCRUDRepository.Create(db, db.Products);
     oDataRepository    = new DefaultWebQueryRepository(Repository);
     TypesRepository    = DefaultCRUDRepository.Create(db, db.ProductTypes);
     this.queryProvider = queryProvider;
 }
        static DBInitializerAdvanced()
        {
            DefaultCRUDRepository <TestContext, Person>
            .DeclareProjection(m => new PersonDTOFlattened
            {
                Children       = m.Children.Select(l => new PersonDTOFlattened {
                }),
                SpouseChildren = m.Spouse.Children.Select(l => new PersonDTOFlattened {
                })
            });

            DefaultCRUDRepository <TestContext, Person>
            .DeclareUpdateProjection <PersonDTOFlattened>
            (
                m =>

                new Person
            {
                Spouse = m.SpouseName == null ? null : new Person
                {
                    Children = m.SpouseChildren.Select(l => new Person {
                        Spouse = l.SpouseName == null ? null : new Person {
                        }
                    }).ToList()
                },
                Children = m.Children.Select(l => new Person {
                }).ToList()
            }
            );

            DefaultCRUDRepository <TestContext, Person>
            .DeclareProjection(m => new PersonDTOFlattenedAuto
            {
                Children       = m.Children.Select(l => new PersonDTOFlattened {
                }),
                SpouseChildren = m.Spouse.Children.Select(l => new PersonDTOFlattened {
                })
            });

            DefaultCRUDRepository <TestContext, Person>
            .DeclareProjection(m => new PersonDTO
            {
                Children = m.Children.Select(l => new PersonDTO {
                    Spouse = l.Spouse == null ? null : new PersonDTO {
                    }
                }),
                Spouse = new PersonDTO {
                    Children = m.Spouse.Children.Select(l => new PersonDTO {
                        Spouse = l.Spouse == null ? null : new PersonDTO {
                        }
                    })
                }
            });

            DefaultCRUDRepository <TestContext, Person>
            .DeclareProjection(m => new PersonDTOAuto
            {
                Children = m.Children.Select(l => new PersonDTO {
                    Spouse = new PersonDTO {
                    }
                }),
                Spouse = m.Spouse == null ? null : new PersonDTO {
                    Children = m.Spouse.Children.Select(l => new PersonDTO {
                        Spouse = new PersonDTO {
                        }
                    })
                }
            });

            DefaultCRUDRepository <TestContext, Person>
            .DeclareUpdateProjection <PersonDTO>
            (
                m =>
                new Person
            {
                Spouse =
                    m.Spouse == null ? null :
                    new Person
                {
                    Children = m.Spouse.Children.Select(l => new Person {
                        Spouse = l.Spouse == null ? null : new Person {
                        }
                    }).ToList()
                },
                Children = m.Children.Select(l => new Person {
                    Spouse = l.Spouse == null ? null : new Person {
                    }
                }).ToList()
            }
            );
        }
Ejemplo n.º 6
0
        public async Task ModifyNotFlattened()
        {
            var lres = await repository.GetPage <PersonDTO>(m => m.Name == "Root2", q => q.OrderBy(m => m.Name), 1, 10);

            var model = lres.Data.FirstOrDefault();

            model.Surname     = "SurnameModified";
            model.Spouse.Name = "SpouseNameModified";
            var minId = model.Children.Min(m => m.Id);
            var maxId = model.Children.Max(m => m.Id);



            var list = model.Children.Where(m => m.Id != minId)
                       .Append(new PersonDTO {
                Name = "AddedName", Surname = "AddedSurname"
            }).ToList();

            var changed = list.Where(m => m.Id == maxId).FirstOrDefault();

            changed.Surname        = "ChildrenSurnameChanged";
            changed.Spouse.Surname = "ChildrenSurnameSpouseChanged";
            model.Children         = list;

            var minIdS = model.Spouse.Children.Min(m => m.Id);
            var maxIdS = model.Spouse.Children.Max(m => m.Id);



            var listS = model.Spouse.Children.Where(m => m.Id != minIdS)
                        .Append(new PersonDTO {
                Name = "AddedName", Surname = "AddedSurname"
            }).ToList();

            changed                = listS.Where(m => m.Id == maxIdS).FirstOrDefault();
            changed.Surname        = "ChildrenSurnameChanged";
            changed.Spouse.Surname = "ChildrenSurnameSpouseChanged";
            model.Spouse.Children  = listS;
            var newCtx = new TestContext();
            var repos  = new DefaultCRUDRepository <TestContext, Person>(newCtx, newCtx.Persons);

            repos.Update(false, model);
            await repos.SaveChanges();

            var id = model.Id.Value;

            model = await repos.GetById <PersonDTO, int>(id);

            Assert.Equal(model.Name, "Root2");
            Assert.Equal(model.Surname, "SurnameModified");
            Assert.Equal(model.Spouse.Name, "SpouseNameModified");
            Assert.Equal(model.Spouse.Surname, "SpouseSurname2");
            Assert.Equal(model.Children.Count(), 4);
            Assert.Equal(model.Spouse.Children.Count(), 4);

            var deleted = model.Children.Where(m => m.Id == minId)
                          .FirstOrDefault();

            Assert.Null(deleted);

            deleted = model.Spouse.Children.Where(m => m.Id == minIdS)
                      .FirstOrDefault();
            Assert.Null(deleted);


            changed = model.Children.Where(m => m.Id == maxId).FirstOrDefault();
            Assert.Equal(changed.Surname, "ChildrenSurnameChanged");
            Assert.Equal(changed.Name, "Name2Children");
            Assert.Equal(changed.Spouse.Surname, "ChildrenSurnameSpouseChanged");
            Assert.Equal(changed.Spouse.Name, "SpouseName2Children");

            changed = model.Spouse.Children.Where(m => m.Id == maxIdS).FirstOrDefault();
            Assert.Equal(changed.Surname, "ChildrenSurnameChanged");
            Assert.Equal(changed.Name, "Name2SpouseChildren");
            Assert.Equal(changed.Spouse.Surname, "ChildrenSurnameSpouseChanged");
            Assert.Equal(changed.Spouse.Name, "SpouseName2SpouseChildren");

            var added = model.Children.Where(m => m.Name == "AddedName").FirstOrDefault();

            Assert.NotNull(added);
            Assert.Equal(added.Surname, "AddedSurname");

            added = model.Spouse.Children.Where(m => m.Name == "AddedName").FirstOrDefault();
            Assert.NotNull(added);
            Assert.Equal(added.Surname, "AddedSurname");
        }
Ejemplo n.º 7
0
 public ProductTypesProvider(ApplicationDbContext db)
 {
     repo = DefaultCRUDRepository.Create(db, db.ProductTypes);
 }
        public async Task <IActionResult> Index()
        {
            //clear database
            ctx.Database.ExecuteSqlCommand("delete  from dbo.TestModels");
            //populate db
            var population = new List <Models.TestModel>();

            for (int i = 0; i < 10; i++)
            {
                var curr = new Models.TestModel
                {
                    FieldA = "FieldA_" + i,
                    FieldB = "FieldB_" + i,
                    FieldC = "FieldC_" + i,
                    FieldD = "FieldD_" + i,
                    FieldE = "FieldE_" + i,
                    FieldF = "FieldF_" + i
                };
                population.Add(curr);
                ctx.TestModels.Add(curr);
            }
            Expression <Func <Models.TestModel, bool> > test = m => (new int[] { 10, 3 }).Contains(m.Id);
            await ctx.SaveChangesAsync();

            //reset context...we are going into a different web page
            foreach (var item in population)
            {
                ctx.Entry(item).State = EntityState.Detached;
            }

            //
            //get data
            var original = await ctx.TestModels.Project().To <Models.TestViewModel>().ToArrayAsync();

            //

            //perform changes (this usually happens in user interface)...
            var copier  = new ObjectCopier <Models.TestViewModel, Models.TestViewModel>();
            var changed = original.Select(m => copier.Copy(m, new Models.TestViewModel())).ToList();

            changed[3].FieldD = "FieldD3_Changed";
            changed[5].FieldF = "FieldF%_Changed";
            changed.Remove(changed[7]);
            changed.Add(new Models.TestViewModel
            {
                FieldA = "FieldA_New",
                FieldB = "FieldB_Bew",
                FieldD = "FieldD_New",
                FieldE = "FieldE_New",
                FieldF = "FieldF_New"
            });
            //
            var repo =
                DefaultCRUDRepository.Create(ctx, ctx.TestModels, null, m => m.FieldA != "FieldA_0");

            DefaultCRUDRepository <ApplicationDbContext, Models.TestModel>
            .DeclareProjection <Models.ITestViewModel>(m => new Models.TestViewModel
            {
                FieldBC = m.FieldB + " " + m.FieldC
            });

            try
            {
                repo.Add <Models.ITestViewModel>(true, new Models.TestViewModel
                {
                    FieldA = "FieldA_ANew2",
                    FieldB = "FieldB_Bew2",
                    FieldD = "FieldD_New2",
                    FieldE = "FieldE_New",
                    FieldF = "FieldF_New"
                });
                repo.UpdateList <Models.ITestViewModel>(false, original, changed);
                changed[6].FieldA = "a change";
                changed[6].FieldF = "a F change";
                repo.Update <Models.ITestViewModel>(false, changed[6]);
                repo.Delete(changed[8].Id);
                await repo.SaveChanges();
            }
            catch (Exception ex)
            {
                var exc = ex;
            }
            //
            //Retrieve changed data and perform custo processing on ViewModel Projection
            var finalData = await repo.GetPage <Models.TestViewModel>(null,
                                                                      x => x.OrderBy(m => m.FieldA),
                                                                      1, 5);

            var finalData1 = await repo.GetPage <Models.TestViewModel>(null,
                                                                       x => x.OrderBy(m => m.FieldA),
                                                                       2, 5);

            var detail = await repo.GetById <Models.ITestViewModel, int>(original[1].Id.Value);

            return(View());
        }
 public DetailTestController(Data.ApplicationDbContext db)
 {
     Repository      = DefaultCRUDRepository.Create(db, db.Products);
     TypesRepository = DefaultCRUDRepository.Create(db, db.ProductTypes);
 }