101 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using Microsoft.AspNetCore.Hosting;
 | 
						|
using Microsoft.EntityFrameworkCore;
 | 
						|
using ThAmCo.Events.Data;
 | 
						|
 | 
						|
namespace ThAmCo.Events.Data
 | 
						|
{
 | 
						|
    public class EventsDbContext : DbContext
 | 
						|
    {
 | 
						|
        public DbSet<Customer> Customers { get; set; }
 | 
						|
        public DbSet<Event> Events { get; set; }
 | 
						|
        public DbSet<GuestBooking> Guests { get; set; }
 | 
						|
        public DbSet<Staffing> Staffing { get; set; }
 | 
						|
        public DbSet<Staff> Staff { get; set; }
 | 
						|
 | 
						|
        private IHostingEnvironment HostEnv { get; }
 | 
						|
 | 
						|
        public EventsDbContext(DbContextOptions<EventsDbContext> options,
 | 
						|
                               IHostingEnvironment env) : base(options)
 | 
						|
        {
 | 
						|
            HostEnv = env;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnConfiguring(DbContextOptionsBuilder builder)
 | 
						|
        {
 | 
						|
            base.OnConfiguring(builder);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnModelCreating(ModelBuilder builder)
 | 
						|
        {
 | 
						|
            base.OnModelCreating(builder);
 | 
						|
 | 
						|
            builder.HasDefaultSchema("thamco.events");
 | 
						|
 | 
						|
            builder.Entity<GuestBooking>()
 | 
						|
                   .HasKey(b => new { b.CustomerId, b.EventId });
 | 
						|
 | 
						|
            builder.Entity<Staffing>()
 | 
						|
                   .HasKey(s => new { s.StaffId, s.EventId });
 | 
						|
 | 
						|
            builder.Entity<Customer>()
 | 
						|
                   .HasMany(c => c.Bookings)
 | 
						|
                   .WithOne(b => b.Customer)
 | 
						|
                   .HasForeignKey(b => b.CustomerId);
 | 
						|
 | 
						|
            builder.Entity<Event>()
 | 
						|
                   .HasMany(e => e.Bookings)
 | 
						|
                   .WithOne(b => b.Event)
 | 
						|
                   .HasForeignKey(b => b.EventId);
 | 
						|
 | 
						|
            builder.Entity<Event>()
 | 
						|
                   .HasMany(e => e.Staffings)
 | 
						|
                   .WithOne(b => b.Event)
 | 
						|
                   .HasForeignKey(b => b.EventId);
 | 
						|
 | 
						|
            builder.Entity<Event>()
 | 
						|
                   .Property(e => e.TypeId)
 | 
						|
                   .IsFixedLength();
 | 
						|
 | 
						|
            builder.Entity<Staff>()
 | 
						|
                   .HasMany(s => s.Staffings)
 | 
						|
                   .WithOne(b => b.Staff)
 | 
						|
                   .HasForeignKey(b => b.StaffId);
 | 
						|
 | 
						|
            // seed data for debug / development testing
 | 
						|
            if (HostEnv != null && HostEnv.IsDevelopment())
 | 
						|
            {
 | 
						|
                builder.Entity<Customer>().HasData(
 | 
						|
                    new Customer { Id = 1, Surname = "Robertson", FirstName = "Robert", Email = "bob@example.com" },
 | 
						|
                    new Customer { Id = 2, Surname = "Thornton", FirstName = "Betty", Email = "betty@example.com" },
 | 
						|
                    new Customer { Id = 3, Surname = "Jellybeans", FirstName = "Jin", Email = "jin@example.com" }
 | 
						|
                );
 | 
						|
 | 
						|
                builder.Entity<Event>().HasData(
 | 
						|
                    new Event { Id = 1, Title = "Bob's Big 50", Date = new DateTime(2016, 4, 12), Duration = new TimeSpan(6, 0, 0), TypeId = "PTY" },
 | 
						|
                    new Event { Id = 2, Title = "Best Wedding Yet", Date = new DateTime(2018, 12, 1), Duration = new TimeSpan(12, 0, 0), TypeId = "WED" }
 | 
						|
                );
 | 
						|
 | 
						|
                builder.Entity<GuestBooking>().HasData(
 | 
						|
                    new GuestBooking { CustomerId = 1, EventId = 1, Attended = true },
 | 
						|
                    new GuestBooking { CustomerId = 2, EventId = 1, Attended = false },
 | 
						|
                    new GuestBooking { CustomerId = 1, EventId = 2, Attended = false },
 | 
						|
                    new GuestBooking { CustomerId = 3, EventId = 2, Attended = false }
 | 
						|
                );
 | 
						|
 | 
						|
                builder.Entity<Staff>().HasData(
 | 
						|
                    new Staff { Id = 1, Surname = "Partridge", FirstName = "Alan", Email = "a@a.a", FirstAid = false },
 | 
						|
                    new Staff { Id = 2, Surname = "Stephenson", FirstName = "Roger", Email = "rege@hotmail.com", FirstAid = true},
 | 
						|
                    new Staff { Id = 3, Surname = "Smith", FirstName = "Alans", Email = "alans@jims.net", FirstAid = false }
 | 
						|
                );
 | 
						|
 | 
						|
                builder.Entity<Staffing>().HasData(
 | 
						|
                    new Staffing { StaffId = 1, EventId = 2 },
 | 
						|
                    new Staffing { StaffId = 2, EventId = 1 },
 | 
						|
                    new Staffing { StaffId = 3, EventId = 1 }
 | 
						|
                );
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |