protected override void OnModelCreating()

in Hands-on lab/lab-files/starter-project/NorthwindMVC/Data/DataContext.cs [43:620]


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.HasDefaultSchema("NW")
                .HasAnnotation("Relational:Collation", "USING_NLS_COMP");

            modelBuilder.Entity<SalesByYear>(entity =>
            {
                entity.HasNoKey();
                entity.Property(e => e.ShippedDate)
                    .HasColumnName("SHIPPEDDATE");
                entity.Property(e => e.OrderID)
                    .HasColumnName("ORDERID");
                entity.Property(e => e.Subtotal)
                    .HasColumnName("SUBTOTAL");
                entity.Property(e => e.Year)
                    .HasColumnName("YEAR");
            });

            modelBuilder.Entity<Category>(entity =>
            {
                entity.ToTable("CATEGORIES");

                entity.HasIndex(e => e.Categoryname, "CATEGORIESCATEGORYNAME");

                entity.Property(e => e.Categoryid)
                    .HasPrecision(10)
                    .ValueGeneratedNever()
                    .HasColumnName("CATEGORYID");

                entity.Property(e => e.Categoryname)
                    .IsRequired()
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("CATEGORYNAME");

                entity.Property(e => e.Description)
                    .HasMaxLength(500)
                    .IsUnicode(false)
                    .HasColumnName("DESCRIPTION");

                entity.Property(e => e.Picture)
                    .HasColumnType("BLOB")
                    .HasColumnName("PICTURE");
            });

            modelBuilder.Entity<Customer>(entity =>
            {
                entity.ToTable("CUSTOMERS");

                entity.HasIndex(e => e.City, "CUSTOMERSCITY");

                entity.HasIndex(e => e.Companyname, "CUSTOMERSCOMPANYNAME");

                entity.HasIndex(e => e.Postalcode, "CUSTOMERSPOSTALCODE");

                entity.HasIndex(e => e.Region, "CUSTOMERSREGION");

                entity.Property(e => e.Customerid)
                    .HasMaxLength(5)
                    .IsUnicode(false)
                    .HasColumnName("CUSTOMERID");

                entity.Property(e => e.Address)
                    .HasMaxLength(60)
                    .IsUnicode(false)
                    .HasColumnName("ADDRESS");

                entity.Property(e => e.City)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("CITY");

                entity.Property(e => e.Companyname)
                    .IsRequired()
                    .HasMaxLength(40)
                    .IsUnicode(false)
                    .HasColumnName("COMPANYNAME");

                entity.Property(e => e.Contactname)
                    .HasMaxLength(40)
                    .IsUnicode(false)
                    .HasColumnName("CONTACTNAME");

                entity.Property(e => e.Contacttitle)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("CONTACTTITLE");

                entity.Property(e => e.Country)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("COUNTRY");

                entity.Property(e => e.Fax)
                    .HasMaxLength(24)
                    .IsUnicode(false)
                    .HasColumnName("FAX");

                entity.Property(e => e.Phone)
                    .HasMaxLength(24)
                    .IsUnicode(false)
                    .HasColumnName("PHONE");

                entity.Property(e => e.Postalcode)
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasColumnName("POSTALCODE");

                entity.Property(e => e.Region)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("REGION");
            });

            modelBuilder.Entity<Customerdemographic>(entity =>
            {
                entity.HasKey(e => e.Customertypeid);

                entity.ToTable("CUSTOMERDEMOGRAPHICS");

                entity.Property(e => e.Customertypeid)
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasColumnName("CUSTOMERTYPEID");

                entity.Property(e => e.Customerdesc)
                    .HasMaxLength(200)
                    .IsUnicode(false)
                    .HasColumnName("CUSTOMERDESC");
            });

            modelBuilder.Entity<Employee>(entity =>
            {
                entity.ToTable("EMPLOYEES");

                entity.HasIndex(e => e.Lastname, "EMPLOYEESLASTNAME");

                entity.HasIndex(e => e.Postalcode, "EMPLOYEESPOSTALCODE");

                entity.Property(e => e.Employeeid)
                    .HasColumnType("NUMBER")
                    .HasColumnName("EMPLOYEEID");

                entity.Property(e => e.Address)
                    .HasMaxLength(60)
                    .IsUnicode(false)
                    .HasColumnName("ADDRESS");

                entity.Property(e => e.Birthdate)
                    .HasColumnType("DATE")
                    .HasColumnName("BIRTHDATE");

                entity.Property(e => e.City)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("CITY");

                entity.Property(e => e.Country)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("COUNTRY");

                entity.Property(e => e.Extension)
                    .HasMaxLength(4)
                    .IsUnicode(false)
                    .HasColumnName("EXTENSION");

                entity.Property(e => e.Firstname)
                    .IsRequired()
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasColumnName("FIRSTNAME");

                entity.Property(e => e.Hiredate)
                    .HasColumnType("DATE")
                    .HasColumnName("HIREDATE");

                entity.Property(e => e.Homephone)
                    .HasMaxLength(24)
                    .IsUnicode(false)
                    .HasColumnName("HOMEPHONE");

                entity.Property(e => e.Lastname)
                    .IsRequired()
                    .HasMaxLength(20)
                    .IsUnicode(false)
                    .HasColumnName("LASTNAME");

                entity.Property(e => e.Notes)
                    .HasColumnType("BLOB")
                    .HasColumnName("NOTES");

                entity.Property(e => e.Photo)
                    .HasColumnType("BLOB")
                    .HasColumnName("PHOTO");

                entity.Property(e => e.Photopath)
                    .HasMaxLength(255)
                    .IsUnicode(false)
                    .HasColumnName("PHOTOPATH");

                entity.Property(e => e.Postalcode)
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasColumnName("POSTALCODE");

                entity.Property(e => e.Region)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("REGION");

                entity.Property(e => e.Reportsto)
                    .HasColumnType("NUMBER")
                    .HasColumnName("REPORTSTO");

                entity.Property(e => e.Title)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("TITLE");

                entity.Property(e => e.Titleofcourtesy)
                    .HasMaxLength(25)
                    .IsUnicode(false)
                    .HasColumnName("TITLEOFCOURTESY");

                entity.HasOne(d => d.ReportstoNavigation)
                    .WithMany(p => p.InverseReportstoNavigation)
                    .HasForeignKey(d => d.Reportsto)
                    .HasConstraintName("FK_EMPLOYEES_EMPLOYEES");
            });

            modelBuilder.Entity<Order>(entity =>
            {
                entity.ToTable("ORDERS");

                entity.HasIndex(e => e.Customerid, "ORDERSCUSTOMERID");

                entity.HasIndex(e => e.Employeeid, "ORDERSEMPLOYEEID");

                entity.HasIndex(e => e.Orderdate, "ORDERSORDERDATE");

                entity.HasIndex(e => e.Shippeddate, "ORDERSSHIPPEDDATE");

                entity.HasIndex(e => e.Shipvia, "ORDERSSHIPPERSORDERS");

                entity.HasIndex(e => e.Shippostalcode, "ORDERSSHIPPOSTALCODE");

                entity.Property(e => e.Orderid)
                    .HasPrecision(10)
                    .ValueGeneratedNever()
                    .HasColumnName("ORDERID");

                entity.Property(e => e.Customerid)
                    .HasMaxLength(5)
                    .IsUnicode(false)
                    .HasColumnName("CUSTOMERID");

                entity.Property(e => e.Employeeid)
                    .HasColumnType("NUMBER")
                    .HasColumnName("EMPLOYEEID");

                entity.Property(e => e.Freight)
                    .HasColumnType("NUMBER(19,4)")
                    .HasColumnName("FREIGHT");

                entity.Property(e => e.Orderdate)
                    .HasPrecision(6)
                    .HasColumnName("ORDERDATE");

                entity.Property(e => e.Requireddate)
                    .HasPrecision(6)
                    .HasColumnName("REQUIREDDATE");

                entity.Property(e => e.Shipaddress)
                    .HasMaxLength(60)
                    .IsUnicode(false)
                    .HasColumnName("SHIPADDRESS");

                entity.Property(e => e.Shipcity)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("SHIPCITY");

                entity.Property(e => e.Shipcountry)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("SHIPCOUNTRY");

                entity.Property(e => e.Shipname)
                    .HasMaxLength(40)
                    .IsUnicode(false)
                    .HasColumnName("SHIPNAME");

                entity.Property(e => e.Shippeddate)
                    .HasPrecision(6)
                    .HasColumnName("SHIPPEDDATE");

                entity.Property(e => e.Shippostalcode)
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasColumnName("SHIPPOSTALCODE");

                entity.Property(e => e.Shipregion)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("SHIPREGION");

                entity.Property(e => e.Shipvia)
                    .HasPrecision(10)
                    .HasColumnName("SHIPVIA");

                entity.HasOne(d => d.Customer)
                    .WithMany(p => p.Orders)
                    .HasForeignKey(d => d.Customerid)
                    .HasConstraintName("FK_ORDERS_CUSTOMERS");

                entity.HasOne(d => d.Employee)
                    .WithMany(p => p.Orders)
                    .HasForeignKey(d => d.Employeeid)
                    .HasConstraintName("FK_ORDERS_EMPLOYEES");

                entity.HasOne(d => d.ShipviaNavigation)
                    .WithMany(p => p.Orders)
                    .HasForeignKey(d => d.Shipvia)
                    .HasConstraintName("FK_ORDERS_SHIPPERS");
            });

            modelBuilder.Entity<OrderDetail>(entity =>
            {
                entity.HasKey(e => new { e.Orderid, e.Productid })
                    .HasName("PK_ORDER_PRODUCT");

                entity.ToTable("ORDER_DETAILS");

                entity.HasIndex(e => e.Orderid, "ORDERDETAILSORDERID");

                entity.HasIndex(e => e.Productid, "ORDERDETAILSPRODUCTID");

                entity.Property(e => e.Orderid)
                    .HasPrecision(10)
                    .HasColumnName("ORDERID");

                entity.Property(e => e.Productid)
                    .HasPrecision(10)
                    .HasColumnName("PRODUCTID");

                entity.Property(e => e.Discount)
                    .HasColumnType("FLOAT")
                    .HasColumnName("DISCOUNT")
                    .HasDefaultValueSql("0 ");

                entity.Property(e => e.Quantity)
                    .HasPrecision(10)
                    .HasColumnName("QUANTITY")
                    .HasDefaultValueSql("1 ");

                entity.Property(e => e.Unitprice)
                    .HasColumnType("NUMBER(19,4)")
                    .HasColumnName("UNITPRICE")
                    .HasDefaultValueSql("0 ");

                entity.HasOne(d => d.Order)
                    .WithMany(p => p.OrderDetails)
                    .HasForeignKey(d => d.Orderid)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_ORDER_DETAILS_ORDERS");

                entity.HasOne(d => d.Product)
                    .WithMany(p => p.OrderDetails)
                    .HasForeignKey(d => d.Productid)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_ORDER_DETAILS_PRODUCTS");
            });

            modelBuilder.Entity<Product>(entity =>
            {
                entity.ToTable("PRODUCTS");

                entity.HasIndex(e => e.Categoryid, "PRODUCTSCATEGORYID");

                entity.HasIndex(e => e.Productname, "PRODUCTSPRODUCTNAME");

                entity.HasIndex(e => e.Supplierid, "PRODUCTSSUPPLIERID");

                entity.Property(e => e.Productid)
                    .HasPrecision(10)
                    .ValueGeneratedNever()
                    .HasColumnName("PRODUCTID");

                entity.Property(e => e.Categoryid)
                    .HasPrecision(10)
                    .HasColumnName("CATEGORYID");

                entity.Property(e => e.Discontinued)
                    .HasPrecision(3)
                    .HasColumnName("DISCONTINUED")
                    .HasDefaultValueSql("0 ");

                entity.Property(e => e.Productname)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false)
                    .HasColumnName("PRODUCTNAME");

                entity.Property(e => e.Quantityperunit)
                    .HasMaxLength(20)
                    .IsUnicode(false)
                    .HasColumnName("QUANTITYPERUNIT");

                entity.Property(e => e.Reorderlevel)
                    .HasPrecision(5)
                    .HasColumnName("REORDERLEVEL")
                    .HasDefaultValueSql("0 ");

                entity.Property(e => e.Supplierid)
                    .HasPrecision(10)
                    .HasColumnName("SUPPLIERID");

                entity.Property(e => e.Unitprice)
                    .HasColumnType("NUMBER(19,4)")
                    .HasColumnName("UNITPRICE")
                    .HasDefaultValueSql("0 ");

                entity.Property(e => e.Unitsinstock)
                    .HasPrecision(5)
                    .HasColumnName("UNITSINSTOCK")
                    .HasDefaultValueSql("0 ");

                entity.Property(e => e.Unitsonorder)
                    .HasPrecision(5)
                    .HasColumnName("UNITSONORDER")
                    .HasDefaultValueSql("0 ");

                entity.HasOne(d => d.Category)
                    .WithMany(p => p.Products)
                    .HasForeignKey(d => d.Categoryid)
                    .HasConstraintName("FK_PRODUCTS_CATEGORIES");

                entity.HasOne(d => d.Supplier)
                    .WithMany(p => p.Products)
                    .HasForeignKey(d => d.Supplierid)
                    .HasConstraintName("FK_PRODUCTS_SUPPLIERS");
            });

            modelBuilder.Entity<Region>(entity =>
            {
                entity.ToTable("REGION");

                entity.Property(e => e.Regionid)
                    .HasColumnType("NUMBER")
                    .HasColumnName("REGIONID");

                entity.Property(e => e.Regiondescription)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false)
                    .HasColumnName("REGIONDESCRIPTION");
            });

            modelBuilder.Entity<Shipper>(entity =>
            {
                entity.ToTable("SHIPPERS");

                entity.Property(e => e.Shipperid)
                    .HasPrecision(10)
                    .ValueGeneratedNever()
                    .HasColumnName("SHIPPERID");

                entity.Property(e => e.Companyname)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false)
                    .HasColumnName("COMPANYNAME");

                entity.Property(e => e.Phone)
                    .HasMaxLength(24)
                    .IsUnicode(false)
                    .HasColumnName("PHONE");
            });

            modelBuilder.Entity<Supplier>(entity =>
            {
                entity.ToTable("SUPPLIERS");

                entity.HasIndex(e => e.Companyname, "SUPPLIERSCOMPANYNAME");

                entity.HasIndex(e => e.Postalcode, "SUPPLIERSPOSTALCODE");

                entity.Property(e => e.Supplierid)
                    .HasPrecision(10)
                    .ValueGeneratedNever()
                    .HasColumnName("SUPPLIERID");

                entity.Property(e => e.Address)
                    .HasMaxLength(60)
                    .IsUnicode(false)
                    .HasColumnName("ADDRESS");

                entity.Property(e => e.City)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("CITY");

                entity.Property(e => e.Companyname)
                    .IsRequired()
                    .HasMaxLength(40)
                    .IsUnicode(false)
                    .HasColumnName("COMPANYNAME");

                entity.Property(e => e.Contactname)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("CONTACTNAME");

                entity.Property(e => e.Contacttitle)
                    .HasMaxLength(30)
                    .IsUnicode(false)
                    .HasColumnName("CONTACTTITLE");

                entity.Property(e => e.Country)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("COUNTRY");

                entity.Property(e => e.Fax)
                    .HasMaxLength(24)
                    .IsUnicode(false)
                    .HasColumnName("FAX");

                entity.Property(e => e.Homepage)
                    .HasMaxLength(2000)
                    .IsUnicode(false)
                    .HasColumnName("HOMEPAGE");

                entity.Property(e => e.Phone)
                    .HasMaxLength(24)
                    .IsUnicode(false)
                    .HasColumnName("PHONE");

                entity.Property(e => e.Postalcode)
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasColumnName("POSTALCODE");

                entity.Property(e => e.Region)
                    .HasMaxLength(15)
                    .IsUnicode(false)
                    .HasColumnName("REGION");
            });

            modelBuilder.Entity<Territory>(entity =>
            {
                entity.ToTable("TERRITORIES");

                entity.Property(e => e.Territoryid)
                    .HasMaxLength(20)
                    .IsUnicode(false)
                    .HasColumnName("TERRITORYID");

                entity.Property(e => e.Regionid)
                    .HasColumnType("NUMBER")
                    .HasColumnName("REGIONID");

                entity.Property(e => e.Territorydescription)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false)
                    .HasColumnName("TERRITORYDESCRIPTION");

                entity.HasOne(d => d.Region)
                    .WithMany(p => p.Territories)
                    .HasForeignKey(d => d.Regionid)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_TERRITORIES_REGION");
            });

            OnModelCreatingPartial(modelBuilder);
        }