예제 #1
0
        public NpgsqlDbContext(DbContextOptions options) : base(options)
        {
            Database.EnsureCreated();

            if (!Genders.Any())
            {
                var male = new Gender {
                    Name = "Мужской"
                };
                var female = new Gender {
                    Name = "Женский"
                };
                var other = new Gender {
                    Name = "Другой"
                };

                Genders.AddRange(new[] { male, female, other });
                SaveChanges();
            }
        }
예제 #2
0
        private void InitialInitialization()
        {
            List <CategoryEntity> categories = new List <CategoryEntity>()
            {
                new CategoryEntity()
                {
                    Name = "Категория-1"
                },
                new CategoryEntity()
                {
                    Name = "Категория-2"
                },
                new CategoryEntity()
                {
                    Name = "Категория-3"
                }
            };



            List <RoleEntity> roles = new List <RoleEntity>()
            {
                new RoleEntity()
                {
                    Name = "Operator"
                },
                new RoleEntity()
                {
                    Name = "Customer"
                }
            };

            List <GenderEntity> genders = new List <GenderEntity>()
            {
                new GenderEntity()
                {
                    Name = "Male"
                },
                new GenderEntity()
                {
                    Name = "Female"
                }
            };

            UserEntity user = new UserEntity()
            {
                Email    = "*****@*****.**",
                Password = "******", //TODO hash этого пароля test
                Role     = roles[1],
                Name     = "Test",
                LastName = "Test",
                Gender   = genders[0]
            };

            Categories.AddRange(categories);


            Roles.AddRange(roles);
            Genders.AddRange(genders);
            Users.Add(user);
            SaveChanges();

            List <SubCategoryEntity> subCategories = new List <SubCategoryEntity>()
            {
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-1-1", CategoryId = categories[0].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-1-2", CategoryId = categories[0].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-1-3", CategoryId = categories[0].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-2-1", CategoryId = categories[1].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-2-2", CategoryId = categories[1].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-2-3", CategoryId = categories[1].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-3-1", CategoryId = categories[2].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-3-2", CategoryId = categories[2].Id
                },
                new SubCategoryEntity()
                {
                    Name = "Подкатегория-3-3", CategoryId = categories[2].Id
                }
            };

            SubCategories.AddRange(subCategories);
            SaveChanges();
        }
예제 #3
0
        /// <summary>
        /// Erstellt eine Datenbank mit Musterdaten. Ist die Datenbank schon vorhanden, werden keine
        /// Änderungen daran durchgeführt.
        /// </summary>
        /// <param name="deleteDb">Gibt ab, ob eine vorhandene Datenbank gelöscht werden soll.</param>
        public void CreateDatabase(bool deleteDb = false)
        {
            if (deleteDb)
            {
                Database.EnsureDeleted();
            }
            if (!Database.EnsureCreated())
            {
                return;
            }

            // Damit bei jedem Programmstart die gleichen Daten generiert werden, wird der
            // Zufallsgenerator mit einem fixen Wert initialisiert. Das ist wichtig, um Fehler
            // reproduzieren zu können.
            Randomizer.Seed = new Random(16030829);
            Randomizer rnd = new Randomizer();

            // Die Geschlechter in die DB schreiben.
            var genders = new List <Gender>
            {
                new Gender {
                    GenderNr = 1, Name = "Male"
                },
                new Gender {
                    GenderNr = 2, Name = "Female"
                },
            };

            Genders.AddRange(genders);
            SaveChanges();

            // 20 Lehrer erzeugen.
            int teacherNr = 1000;
            var teachers  = new Faker <Teacher>()
                            .RuleFor(t => t.Firstname, f => f.Name.FirstName())
                            .RuleFor(t => t.Lastname, f => f.Name.LastName())
                            .RuleFor(t => t.TeacherNr, (f, t) => $"{t.Lastname.Substring(0, 3).ToUpper()}{teacherNr++}")
                            .RuleFor(t => t.Email, (f, t) => t.TeacherNr.ToLower() + "@spengergasse.at")
                            .Generate(20);

            Teachers.AddRange(teachers);
            SaveChanges();

            // Die Klassen 1AHIF - 5AHIF erzeugen.
            var classes = Enumerable.Range(1, 5)
                          .Select(i => new Schoolclass
            {
                ClassNr = i.ToString() + "AHIF",
                Room    = $"{rnd.String2(1, "ABC")}{rnd.String2(1, "1234")}.{rnd.String2(1, "01")}{rnd.String2(1, "123456789")}",
                KV      = rnd.ListItem(teachers)
            }).ToList();

            Classes.AddRange(classes);
            SaveChanges();

            // 50 Schüler erzeugen und in eine zufällige Klasse setzen.
            var pupils = new Faker <Pupil>()
                         .RuleFor(p => p.Gender, f => f.Random.ListItem(genders))
                         .RuleFor(p => p.Lastname, f => f.Name.LastName())
                         .RuleFor(p => p.Firstname, (f, p) => f.Name.FirstName((Bogus.DataSets.Name.Gender)(p.Gender.GenderNr - 1)))
                         .RuleFor(p => p.Schoolclass, f => f.Random.ListItem(classes))
                         // Bei nullable Werten erzeugen wir 20 % NULL werten. In diesem Fall wird das Geburtsdatum
                         // nicht bei jedem Schüler eingetragen.
                         .RuleFor(p => p.DateOfBirth, (f, p) =>
                                  f.Date.Between(
                                      new DateTime(2006 - int.Parse(p.Schoolclass.ClassNr.Substring(0, 1)), 9, 1),
                                      new DateTime(2007 - int.Parse(p.Schoolclass.ClassNr.Substring(0, 1)), 9, 1)).Date.OrNull(f, 0.2f))
                         .Generate(50);

            Pupils.AddRange(pupils);
            SaveChanges();

            // Generator für Prüfungen erzeugen.
            var examFaker = new Faker <Exam>()
                            .RuleFor(e => e.Subject, f => f.Random.ListItem(new string[] { "AM", "D", "E", "POS", "DBI" }))
                            .RuleFor(e => e.Date, f => f.Date.Between(new DateTime(2019, 9, 1), new DateTime(2020, 7, 1)).Date)
                            .RuleFor(e => e.Examiner, f => f.Random.ListItem(teachers))
                            .RuleFor(e => e.Grade, f => f.Random.Int(1, 5).OrNull(f, 0.2f));

            // 3 - 5 Prüfungen für jeden Schüler erzeugen und die Liste der Prüfungen des Schülers
            // setzen.
            foreach (var p in pupils)
            {
                int examCount = rnd.Int(3, 5);
                // Der Schüler wird erst jetzt zugewiesen, da wir für jeden Schüler Prüfungen
                // generieren wollen.
                Exams.AddRange(examFaker.RuleFor(e => e.Pupil, f => p).Generate(examCount));
            }
            SaveChanges();
        }