示例#1
0
        public override void Update(DataModel Other)
        {
            Department d = (Department)Other;

            Name = d.Name;
            Teachers.Clear();
            Teachers.AddRange(d.Teachers);
            Rooms.Clear();
            Rooms.AddRange(d.Rooms);
        }
示例#2
0
 public Cathedra(string name, List <Teacher> teachers)
 {
     Name = name;
     Teachers.AddRange(teachers);
 }
示例#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();
        }