コード例 #1
0
        private void SeedRoutes(iBDZDbContext db)
        {
            CSV csv = CSV.ReadFile(@"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\Routes.csv", "|", true);

            List <string> routeNames = db.Routes.Select(x => x.Name).ToList();

            foreach (var line in csv.Data)
            {
                if (!routeNames.Contains(line["Name"]))
                {
                    Route route = new Route()
                    {
                        Name = line["Name"]
                    };
                    db.Routes.Add(route);

                    string[] stations = line["Stations"].Split(',');
                    for (int i = 0; i < stations.Length - 1; i++)
                    {
                        AddConnectingLine(db, stations[i], stations[i + 1]);
                        AddRouteTrainStation(db, route, stations, i);
                    }
                    AddRouteTrainStation(db, route, stations, stations.Length - 1);
                }
            }
        }
コード例 #2
0
        public async Task SeedAsync(IServiceProvider serviceProvider)
        {
            iBDZDbContext db = (iBDZDbContext)serviceProvider.GetService(typeof(iBDZDbContext));

            SeedTrainCarData(db);
            SeedLocomotivesData(db);
            await db.SaveChangesAsync();
        }
コード例 #3
0
        private void AddRouteTrainStation(iBDZDbContext db, Route route, string[] stations, int i)
        {
            RouteTrainStation routeTrainStation = new RouteTrainStation()
            {
                TrainStationId = db.TrainStations.First(x => x.Name == stations[i]).Id,
                RouteId        = route.Id,
                Order          = (uint)i,
            };

            db.RouteTrainStations.Add(routeTrainStation);
        }
コード例 #4
0
        private void AddConnectingLine(iBDZDbContext db, string station1, string station2)
        {
            ConnectingLine res = new ConnectingLine()
            {
                AverageSpeed = 1,
                Electrified  = true,
                Node1        = db.TrainStations.First(x => x.Name == station1),
                Node2        = db.TrainStations.First(x => x.Name == station2)
            };

            db.ConnectingLines.Add(res);
        }
コード例 #5
0
        public static void AddRoute(iBDZDbContext db, string StartStation, string MiddleStation, string EndStation)
        {
            db.Routes.Add(new Route
            {
                StartStation  = StartStation,
                EndStation    = EndStation,
                MiddleStation = MiddleStation
            });

            db.Routes.Add(new Route
            {
                StartStation  = EndStation,
                EndStation    = StartStation,
                MiddleStation = MiddleStation
            });
        }
コード例 #6
0
 private static void FillSeats(TrainCar car, iBDZDbContext db)
 {
     // Every train car is split into nine coupes...
     for (int i = 1; i <= 9; i++)
     {
         // ... however, compartment and sleeping cars have a different number of places available.
         if (car.Type == TrainCarType.Compartments)
         {
             // First and business class compartments have six seats.
             if (car.Class == TrainCarClass.First || car.Class == TrainCarClass.Business)
             {
                 for (int j = 1; j <= 6; j++)
                 {
                     Seat s = new Seat {
                         Coupe = i, SeatNumber = j, Reserver = null
                     };
                     db.Seats.Add(s);
                     car.Seats.Add(s);
                 }
             }
             // Second class compartments have 8 seats;
             else if (car.Class == TrainCarClass.Second)
             {
                 for (int j = 1; j <= 8; j++)
                 {
                     Seat s = new Seat {
                         Coupe = i, SeatNumber = j, Reserver = null
                     };
                     db.Seats.Add(s);
                     car.Seats.Add(s);
                 }
             }
         }
         // Sleeping cars have only three beds and the class of car doesn't dictate the quantity.
         else if (car.Type == TrainCarType.Beds)
         {
             for (int j = 1; j <= 3; j++)
             {
                 Seat s = new Seat {
                     Coupe = i, SeatNumber = j, Reserver = null
                 };
                 db.Seats.Add(s);
                 car.Seats.Add(s);
             }
         }
     }
 }
コード例 #7
0
        private void SeedTrainStations(iBDZDbContext db)
        {
            CSV csv = CSV.ReadFile(@"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\TrainStationData.csv", " | ", true);

            List <string> trainStationNames = db.TrainStations.Select(x => x.Name).ToList();

            foreach (var line in csv.Data)
            {
                if (!trainStationNames.Contains(line["Name"]))
                {
                    db.TrainStations.Add(new TrainStation()
                    {
                        Name      = line["Name"],
                        Latitude  = double.Parse(line["Latitude"]),
                        Longitude = double.Parse(line["Longitude"]),
                    });
                }
            }
        }
コード例 #8
0
        private void SeedTrainCarData(iBDZDbContext db)
        {
            CSV data = CSV.ReadFile(
                @"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\TrainCars.csv",
                "|",
                true
                );

            List <string> trainCarNames = db.TrainCarData.Select(x => x.Name).ToList();

            foreach (var line in data.Data)
            {
                TrainCarData trainCarData = ReadTrainCarData(line);
                if (!trainCarNames.Contains(trainCarData.Name))
                {
                    db.TrainCarData.Add(trainCarData);
                }
            }
        }
コード例 #9
0
        private void RepurposeTrains()
        {
            Random r    = new Random();
            var    opts = new DbContextOptionsBuilder <iBDZDbContext>();

            opts.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));

            while (IsRunning)
            {
                using (iBDZDbContext db = new iBDZDbContext(opts.Options))
                {
                    List <Train> trains = db.Trains
                                          .Include(x => x.Route)
                                          .Include(x => x.Cars)
                                          .ThenInclude(x => x.Seats)
                                          .ThenInclude(x => x.Reserver)
                                          .Where(x => x.TimeOfArrival <= DateTime.Now)
                                          .ToList();

                    // NOTE: Throws if reverse version of train's route doesn't exist.
                    //       This only applies to manual Db seeding, the automatic system
                    //       always adds the reverse version of the route as well.
                    trains.ForEach(x =>
                    {
                        var availableRoutes = db.Routes.Where(y => y.StartStation == x.Route.EndStation).ToList();
                        x.TimeOfDeparture   = DateTime.Now.AddHours(r.Next(24, 24 * 7));
                        x.TimeOfDeparture  += new TimeSpan(0, 30 * r.Next(0, 1), 0);
                        x.TimeOfArrival     = x.TimeOfDeparture.AddMinutes(r.Next(7, 16) * 30);
                        x.Route             = availableRoutes.Skip(r.Next(0, availableRoutes.Count - 1)).First();
                        x.Cars.ForEach(y => y.Seats.ForEach(z => z.Reserver = null));
                    });

                    db.Trains.UpdateRange(trains);
                    db.SaveChanges();
                }

                Thread.Sleep(new TimeSpan(0, 30, 0));
            }
        }
コード例 #10
0
        private static void FillTrainCars(int numCars, Train train, iBDZDbContext db)
        {
            RatioDistributor rd  = new RatioDistributor(SecondClassDistrib, FirstClassDistrib, BedCarsDistrib, BusinessClassDistrib);
            var carDistributions = rd.DistributeInt(numCars);

            List <TrainCar> templates = new List <TrainCar>()
            {
                new TrainCar()
                {
                    Type = TrainCarType.Compartments, Class = TrainCarClass.Second
                },
                new TrainCar()
                {
                    Type = TrainCarType.Compartments, Class = TrainCarClass.First
                },
                new TrainCar()
                {
                    Type = TrainCarType.Beds, Class = TrainCarClass.Business
                },
                new TrainCar()
                {
                    Type = TrainCarType.Compartments, Class = TrainCarClass.Business
                },
            };

            int templateIndex = 0;

            foreach (int distrib in carDistributions)
            {
                for (int i = 0; i < carDistributions[0]; i++)
                {
                    TrainCar c = new TrainCar(templates[templateIndex]);
                    FillSeats(c, db);
                    train.Cars.Add(c);
                    db.TrainCars.Add(c);
                }
                templateIndex++;
            }
        }
コード例 #11
0
        public static Train GenTrain(iBDZDbContext db)
        {
            Random r = new Random();

            DateTime today         = DateTime.Today;
            DateTime timeOfDep     = today.AddHours(r.NextDouble() * 7 + 4);
            DateTime timeOfArrival = timeOfDep.AddMinutes(r.NextDouble() * 120 + 125);

            List <Route> routes = db.Routes.ToList();

            Train t = new Train()
            {
                Route           = routes.Skip(r.Next(0, db.Routes.Count() - 1)).First(),
                TimeOfDeparture = timeOfDep,
                TimeOfArrival   = timeOfArrival,
                Type            = (TrainType)Enum.GetValues(typeof(TrainType)).GetValue(r.Next(Enum.GetValues(typeof(TrainType)).Length)),
            };

            t.RouteId = t.Route.Id;

            FillTrainCars(r.Next(MinNumCars, MaxNumCars), t, db);
            return(t);
        }
コード例 #12
0
        private void SeedLocomotivesData(iBDZDbContext db)
        {
            CSV data = CSV.ReadFile(
                @"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\Locomotives.csv",
                "|",
                true
                );

            List <string> locomotiveNames = db.Locomotives.Select(x => x.Name).ToList();

            foreach (var line in data.Data)
            {
                LocomotiveData locomotiveData = new LocomotiveData()
                {
                    Name = line["Name"],
                    Type = Enum.Parse <LocomotiveType>(line["Type"])
                };

                if (!locomotiveNames.Contains(locomotiveData.Name))
                {
                    db.Locomotives.Add(locomotiveData);
                }
            }
        }
コード例 #13
0
 public SeatService(iBDZDbContext db)
 {
     this.db = db;
 }
コード例 #14
0
 public RouteService(iBDZDbContext db)
 {
     this.db = db;
 }
コード例 #15
0
 public TrainService(iBDZDbContext db, IRouteService routeService)
 {
     this.db           = db;
     this.routeService = routeService;
 }
コード例 #16
0
 public AdminService(iBDZDbContext db, UserManager <User> userManager, IUserService userService)
 {
     this.db          = db;
     this.userManager = userManager;
     this.userService = userService;
 }
コード例 #17
0
 public MapService(iBDZDbContext db, IMapper mapper)
 {
     this.db     = db;
     this.mapper = mapper;
 }
コード例 #18
0
 public UserService(iBDZDbContext db)
 {
     this.db = db;
 }