// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

namespace DAL
{
    public partial class Wwwings66_VieledatenContext : DbContext
    {
        public Wwwings66_VieledatenContext()
        {
        }

        public Wwwings66_VieledatenContext(DbContextOptions<Wwwings66_VieledatenContext> options)
            : base(options)
        {
        }

        public virtual DbSet<Flug> Flug { get; set; }
        public virtual DbSet<FlugPassagier> FlugPassagier { get; set; }
        public virtual DbSet<Mitarbeiter> Mitarbeiter { get; set; }
        public virtual DbSet<Passagier> Passagier { get; set; }
        public virtual DbSet<Person> Person { get; set; }
        public virtual DbSet<Pilot> Pilot { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
                optionsBuilder.UseSqlServer("Data Source=YourServer;Initial Catalog=WWWings66_vieleDaten;Integrated Security=True");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.HasAnnotation("ProductVersion", "2.2.0-rtm-35687");

            modelBuilder.Entity<Flug>(entity =>
            {
                entity.HasKey(e => e.FlugNr)
                    .HasName("PK_Betrieb.Flug");

                entity.ToTable("Flug", "Betrieb");

                entity.HasIndex(e => e.Abflugort)
                    .HasName("NonClusteredIndex-20160531-004329");

                entity.HasIndex(e => e.PilotPersonId)
                    .HasName("IX_Pilot_PersonID");

                entity.Property(e => e.FlugNr).ValueGeneratedNever();

                entity.Property(e => e.Abflugort)
                    .IsRequired()
                    .HasMaxLength(30);

                entity.Property(e => e.Ankunft).HasColumnType("datetime");

                entity.Property(e => e.Datum).HasColumnType("datetime");

                entity.Property(e => e.Memo).IsUnicode(false);

                entity.Property(e => e.PilotPersonId).HasColumnName("Pilot_PersonID");

                entity.Property(e => e.Timestamp)
                    .IsRequired()
                    .IsRowVersion();

                entity.Property(e => e.Zielort)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false);

                entity.HasOne(d => d.PilotPerson)
                    .WithMany(p => p.Flug)
                    .HasForeignKey(d => d.PilotPersonId)
                    .HasConstraintName("FK_FL_Flug_PI_Pilot");
            });

            modelBuilder.Entity<FlugPassagier>(entity =>
            {
                entity.HasKey(e => new { e.FlugFlugNr, e.PassagierPersonId })
                    .HasName("PK_Betrieb.Flug_Passagier");

                entity.ToTable("Flug_Passagier", "Betrieb");

                entity.HasIndex(e => e.FlugFlugNr)
                    .HasName("IX_Flug_FlugNr");

                entity.HasIndex(e => e.PassagierPersonId)
                    .HasName("IX_Passagier_PersonID");

                entity.Property(e => e.FlugFlugNr).HasColumnName("Flug_FlugNr");

                entity.Property(e => e.PassagierPersonId).HasColumnName("Passagier_PersonID");

                entity.HasOne(d => d.FlugFlugNrNavigation)
                    .WithMany(p => p.FlugPassagier)
                    .HasForeignKey(d => d.FlugFlugNr)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_Flug_Passagier_Flug");

                entity.HasOne(d => d.PassagierPerson)
                    .WithMany(p => p.FlugPassagier)
                    .HasForeignKey(d => d.PassagierPersonId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_Flug_Passagier_Passagier");
            });

            modelBuilder.Entity<Mitarbeiter>(entity =>
            {
                entity.HasKey(e => e.PersonId)
                    .HasName("PK_Betrieb.Mitarbeiter");

                entity.ToTable("Mitarbeiter", "Betrieb");

                entity.HasIndex(e => e.PersonId)
                    .HasName("IX_PersonID");

                entity.HasIndex(e => e.VorgesetzterPersonId)
                    .HasName("IX_VorgesetzterPersonID");

                entity.Property(e => e.PersonId)
                    .HasColumnName("PersonID")
                    .ValueGeneratedNever();

                entity.Property(e => e.Einstellungsdatum).HasColumnType("datetime");

                entity.Property(e => e.VorgesetzterPersonId).HasColumnName("VorgesetzterPersonID");

                entity.HasOne(d => d.Person)
                    .WithOne(p => p.Mitarbeiter)
                    .HasForeignKey<Mitarbeiter>(d => d.PersonId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_MI_Mitarbeiter_PE_Person");

                entity.HasOne(d => d.VorgesetzterPerson)
                    .WithMany(p => p.InverseVorgesetzterPerson)
                    .HasForeignKey(d => d.VorgesetzterPersonId)
                    .HasConstraintName("FK_Mitarbeiter_Mitarbeiter");
            });

            modelBuilder.Entity<Passagier>(entity =>
            {
                entity.HasKey(e => e.PersonId)
                    .HasName("PK_Betrieb.Passagier");

                entity.ToTable("Passagier", "Betrieb");

                entity.HasIndex(e => e.PersonId)
                    .HasName("IX_PersonID");

                entity.Property(e => e.PersonId)
                    .HasColumnName("PersonID")
                    .ValueGeneratedNever();

                entity.Property(e => e.KundeSeit).HasColumnType("datetime");

                entity.Property(e => e.KundenStatus).HasMaxLength(1);

                entity.HasOne(d => d.Person)
                    .WithOne(p => p.Passagier)
                    .HasForeignKey<Passagier>(d => d.PersonId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_PS_Passagier_PE_Person");
            });

            modelBuilder.Entity<Person>(entity =>
            {
                entity.ToTable("Person", "Betrieb");

                entity.Property(e => e.PersonId)
                    .HasColumnName("PersonID")
                    .ValueGeneratedNever();

                entity.Property(e => e.Email)
                    .HasColumnName("EMail")
                    .HasMaxLength(50);

                entity.Property(e => e.Geburtsort).HasMaxLength(30);

                entity.Property(e => e.Geburtstag).HasColumnType("datetime");

                entity.Property(e => e.Land).HasMaxLength(2);

                entity.Property(e => e.Memo).IsUnicode(false);

                entity.Property(e => e.Name)
                    .IsRequired()
                    .HasMaxLength(50);

                entity.Property(e => e.Stadt).HasMaxLength(30);

                entity.Property(e => e.Vorname)
                    .IsRequired()
                    .HasMaxLength(50);
            });

            modelBuilder.Entity<Pilot>(entity =>
            {
                entity.HasKey(e => e.PersonId)
                    .HasName("PK_Betrieb.Pilot");

                entity.ToTable("Pilot", "Betrieb");

                entity.HasIndex(e => e.PersonId)
                    .HasName("IX_PersonID");

                entity.Property(e => e.PersonId)
                    .HasColumnName("PersonID")
                    .ValueGeneratedNever();

                entity.Property(e => e.FlugscheinSeit).HasColumnType("datetime");

                entity.Property(e => e.Flugscheintyp).HasMaxLength(1);

                entity.Property(e => e.Flugschule).HasMaxLength(50);

                entity.HasOne(d => d.Person)
                    .WithOne(p => p.Pilot)
                    .HasForeignKey<Pilot>(d => d.PersonId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_PI_Pilot_MI_Mitarbeiter");
            });

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }
}
