public void SeedData(CompanyEntities db)
        {
            Console.WriteLine("Seeding managers");

            //Add managers
            if (this.managerIds == null)
            {
                this.managerIds = db.Employees.Select(employee => employee.EmployeeId).ToList();
            }

            db.Configuration.AutoDetectChangesEnabled = true;
            var counter = 0;

            foreach (var employee in db.Employees)
            {
                if (Utilities.Instance.GenerateRandomInteger(1, 100) < 95)
                {
                    var managerId = GetManager(db);
                    employee.ManagerId = managerId;
                }

                if (counter % 100 == 0)
                {
                    Console.Write(".");
                }

                counter++;
            }

            db.SaveChanges();

            Console.WriteLine("Managers seeded!");
        }
        public void SeedData(CompanyEntities db)
        {
            Console.WriteLine("Seeding projects");
            if (this.employees == null)
            {
                this.employees = db.Employees.ToList();
            }

            for (int i = 0; i < numberOfRecordsToSeed; i++)
            {
                var projectName = Utilities.Instance.GenerateRandomString(MinCharsProjectName, MaxCharsProjectName);
                var newProject = new Project() { Name = projectName };

                db.Projects.Add(newProject);

                if (i % 100 == 0)
                {
                    Console.Write(".");
                    db.SaveChanges();
                }
            }

            Console.WriteLine("Projects seeded!");
            db.SaveChanges();
        }
        public void SeedData(CompanyEntities db)
        {
            Console.WriteLine("Seeding employees");

            if (this.departmentIds == null)
            {
                this.departmentIds = db.Departments.Select(department => department.DepartmentId).ToList();
            }

            for (int i = 0; i < numberOfRecordsToSeed; i++)
            {
                string firstName = Utilities.Instance.GenerateRandomString(MinCharLengthOfName, MaxcharLengthOfName);
                string lastName = Utilities.Instance.GenerateRandomString(MinCharLengthOfName, MaxcharLengthOfName);
                int salary = Utilities.Instance.GenerateRandomInteger(MinSalary, MaxSalary);
                int departmentId = GetDepartmentId(db);

                var newEmployee = new Employee() { FirstName = firstName, LastName = lastName, YearSalary = salary, DepartmentId = departmentId };

                db.Employees.Add(newEmployee);

                if (i % 100 == 0)
                {
                    Console.Write(".");
                    db.SaveChanges();
                }
            }

            db.SaveChanges();

            Console.WriteLine("Employees seeded");
        }
        public void SeedData(CompanyEntities db)
        {
            string newDepartmentName = string.Empty;

            for (int i = 0; i < this.numberOfRecordsToSeed; i++)
            {
                while (true)
                {
                    newDepartmentName = Utilities.Instance.GenerateRandomString(MinCharLengthOfDepartment, MaxcharLengthOfDepartment);

                    if (!db.Departments.Any(department => department.Name.Equals(newDepartmentName)))
                    {
                        break;
                    }
                    else
                    {
                        newDepartmentName = Utilities.Instance.GenerateRandomString(MinCharLengthOfDepartment, MaxcharLengthOfDepartment);
                    }
                }

                var newDepartment = new Department() { Name = newDepartmentName };

                db.Departments.Add(newDepartment);

                if (i % 100 == 0)
                {
                    db.SaveChanges();
                }
            }

            db.SaveChanges();
        }
        private void AddReports(CompanyEntities db, int id)
        {
            var numberOfReports = Utilities.Instance.GenerateRandomInteger(minNumberOfRecords, maxNumberOfRecords);

            for (int i = 0; i < numberOfReports; i++)
            {
                var text = Utilities.Instance.GenerateRandomString(50, 100);
                var timeOfReport = DateTime.Now;
                var newReport = new Report() { Text = text, TimeOfReport = timeOfReport, EmployeeId = id };

                db.Reports.Add(newReport);
            }

            db.SaveChanges();
        }
        static void Main()
        {
            //NOTE!!! I am using SQL server. 
            //If you are using SQLEXPRESS, please change the conection string.
            var db = new CompanyEntities();
            db.Configuration.AutoDetectChangesEnabled = false;

            List<IDataSeeder> seeders = new List<IDataSeeder>();
            seeders.Add(new DepartmentSeeder(100));
            seeders.Add(new EmployeeSeeder(5000));
            seeders.Add(new ManagerSeeder());
            seeders.Add(new ReportSeeder(25, 75)); //between 50 per employee
            seeders.Add(new ProjectSeeder(1000));

            foreach (var seeder in seeders)
            {
                seeder.SeedData(db);
            }

            db.SaveChanges();
        }
        public void SeedData(CompanyEntities db)
        {
            Console.WriteLine("Seeding reports");

            if (this.employeeIds == null)
            {
                this.employeeIds = db.Employees.Select(employee => employee.EmployeeId).ToList();
            }

            var counter = 0;
            foreach (var id in employeeIds)
            {
                AddReports(db, id);

                if (counter % 100 == 0)
                {
                    Console.Write(".");
                }

                counter++;
            }

            Console.WriteLine("Reports seeded");
        }
        private int GetManager(CompanyEntities db)
        {
            var selectedManagerId = this.managerIds[Utilities.Instance.GenerateRandomInteger(0, this.managerIds.Count - 1)];

            return selectedManagerId;
        }
        private int GetDepartmentId(CompanyEntities db)
        {
            var selectedDepartmentId = this.departmentIds[Utilities.Instance.GenerateRandomInteger(0, this.departmentIds.Count - 1)];

            return selectedDepartmentId;
        }