using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using FaKrosnoEfDataModel.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; namespace FaKrosnoEfDataModel { public class FaKrosnoDbContext : DbContext { public FaKrosnoDbContext(DbContextOptions options) : base(options) { } public DbSet Purchasers { get; set; } public DbSet Recipients { get; set; } public DbSet ScheduleOrders { get; set; } public DbSet ScheduleOrderDetails { get; set; } public DbSet ScheduleOrderDetailDetails { get; set; } public DbSet ScheduleOrderDetailDetailMiscs { get; set; } public DbSet ScheduleOrderDetailMiscs { get; set; } public DbSet ScheduleOrderMiscs { get; set; } public DbSet Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); var connectionString = configuration.GetConnectionString("FaKrosnoConnection"); optionsBuilder.UseSqlServer(connectionString, options => options.CommandTimeout(300)); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("purchaser"); modelBuilder.Entity().ToTable("recipient") .HasOne(p => p.Purchaser) .WithMany(p => p.Recipients) .HasForeignKey(p => p.PurchaserID); modelBuilder.Entity().ToTable("schedule_order") .HasOne(s => s.Recipient) .WithMany(r => r.ScheduleOrders) .HasForeignKey(s => s.RecipientID); modelBuilder.Entity().ToTable("schedule_order_detail") .HasOne(s => s.ScheduleOrder) .WithMany(s => s.ScheduleOrderDetails) .HasForeignKey(s => s.ScheduleOrderID); modelBuilder.Entity().ToTable("schedule_order_detail_detail") .HasOne(s => s.ScheduleOrderDetail) .WithMany(s => s.ScheduleOrderDetailDetails) .HasForeignKey(s => s.ScheduleOrderDetailID); modelBuilder.Entity().ToTable("schedule_order_detail_detail_misc") .HasOne(s => s.ScheduleOrderDetailDetail) .WithMany(s => s.ScheduleOrderDetailDetailMiscs) .HasForeignKey(s => s.ScheduleOrderDetailDetailID); modelBuilder.Entity().ToTable("schedule_order_detail_misc") .HasOne(s => s.ScheduleOrderDetail) .WithMany(s => s.ScheduleOrderDetailMiscs) .HasForeignKey(s => s.ScheduleOrderDetailID); modelBuilder.Entity().ToTable("schedule_order_misc") .HasOne(s => s.ScheduleOrder) .WithMany(s => s.ScheduleOrderMiscs) .HasForeignKey(s => s.ScheduleOrderID); modelBuilder.Entity(entity => entity.Property(x => x.Price).IsRequired(false)); modelBuilder.Entity(entity => entity.Property(x => x.Label).IsRequired(false)); modelBuilder.Entity(entity => entity.Property(x => x.Label).IsRequired(false)); modelBuilder.Entity(entity => { entity.Property(x => x.SccDesc).IsRequired(false); entity.Property(x => x.QtyType).IsRequired(false); entity.Property(x => x.QtyDesc).IsRequired(false); entity.Property(x => x.ShipDate).IsRequired(false); }); modelBuilder.Entity(entity => { entity.ToTable("product"); entity.HasKey(e => e.ID); entity.Property(e => e.ID) .HasColumnName("ID") .ValueGeneratedOnAdd(); entity.Property(e => e.RecipientID) .HasColumnName("recipientID") .IsRequired(); entity.Property(e => e.RecipientIdx) .HasColumnName("recipientIdx") .HasMaxLength(50) .IsRequired(); entity.Property(e => e.FaIdx) .HasColumnName("faIdx") .HasMaxLength(50) .IsRequired(); // Define the unique constraint for recipientID and recipientIdx entity.HasIndex(e => new { e.RecipientID, e.RecipientIdx }) .HasDatabaseName("IX_product") .IsUnique(); }); } } }