using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace qdr.app.bundleboiler.data.Model { public class BoilerDbContext : DbContext { public BoilerDbContext(DbContextOptions options) : base(options) { } public DbSet Activities { get; set; } public DbSet Artifacts { get; set; } public DbSet ArtifactAttributes { get; set; } public DbSet Attachments { get; set; } public DbSet AttributeCategories { get; set; } public DbSet Bundles { get; set; } public DbSet BundleAttributes { get; set; } public DbSet Enumerations { get; set; } public DbSet Projects { get; set; } public DbSet Realizations { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(BuildActivity); modelBuilder.Entity(BuildArtifact); modelBuilder.Entity(BuildArtifactAttribute); modelBuilder.Entity(BuildAttachment); modelBuilder.Entity(BuildAttributeCategory); modelBuilder.Entity(BuildBundle); modelBuilder.Entity(BuildBundleAttribute); modelBuilder.Entity(BuildEnumeration); modelBuilder.Entity(BuildProject); modelBuilder.Entity(BuildRealization); } private void BuildActivity(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.Code).IsRequired().HasMaxLength(50); builder.Property(x => x.Name).IsRequired().HasMaxLength(250); builder.Property(x => x.Description).HasMaxLength(500); builder.Property(x => x.ClassType).IsRequired(); builder.HasOne(x => x.Parent) .WithMany(x => x.Activities) .IsRequired(); } private void BuildArtifact(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.VersionCode).IsRequired().HasMaxLength(20); builder.Property(x => x.Description).HasMaxLength(500); builder.Property(x => x.OrderNo).IsRequired(); builder.HasOne(x => x.Type).WithMany().IsRequired(); builder.HasOne(x => x.Parent) .WithMany(x => x.Artifacts) .IsRequired(); builder.HasMany(x => x.Attributes) .WithOne(x => x.Owner) .IsRequired(); } private void BuildArtifactAttribute(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.HasOne(x => x.Parent) .WithMany() .IsRequired(); builder.HasOne(x => x.Owner) .WithMany(x => x.Attributes) .IsRequired(); } private void BuildAttachment(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.FileName).IsRequired().HasMaxLength(250); builder.Property(x => x.ContentType).IsRequired().HasMaxLength(50); builder.Property(x => x.Content).IsRequired(); builder.HasOne(x => x.Parent) .WithMany(x => x.Attachments) .IsRequired(); } private void BuildAttributeCategory(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.Code).IsRequired().HasMaxLength(50); builder.Property(x => x.Name).IsRequired().HasMaxLength(250); builder.Property(x => x.Description).HasMaxLength(500); builder.Property(x => x.DefaultValue).HasMaxLength(500); builder.Property(x => x.ClassType).IsRequired(); } private void BuildBundle(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.Code).IsRequired().HasMaxLength(50); builder.Property(x => x.Name).IsRequired().HasMaxLength(250); builder.Property(x => x.Description).HasMaxLength(500); builder.Property(x => x.VersionMajor).IsRequired(); builder.Property(x => x.VersionMinor).IsRequired(); builder.Property(x => x.VersionRevision).IsRequired(); builder.HasOne(x => x.BundleType) .WithMany() .IsRequired(); builder.HasMany(x => x.Artifacts) .WithOne(x => x.Parent) .IsRequired(); builder.HasMany(x => x.Attributes) .WithOne(x => x.Owner) .IsRequired(); builder.HasMany(x => x.Realizations) .WithOne(x => x.Parent) .IsRequired(); builder.HasMany(x => x.Environments) .WithMany(); builder.HasMany(x => x.Forks) .WithMany(); builder.HasOne(x => x.Follows) .WithMany(x => x.Covers) .IsRequired(false); } private void BuildBundleAttribute(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.HasOne(x => x.Parent) .WithMany() .IsRequired(); builder.HasOne(x => x.Owner) .WithMany(x => x.Attributes) .IsRequired(); } private void BuildEnumeration(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.Code).IsRequired().HasMaxLength(50); builder.Property(x => x.Name).IsRequired().HasMaxLength(250); builder.Property(x => x.Description).HasMaxLength(500); builder.Property(x => x.ClassType).IsRequired(); builder.Property(x => x.OrderNo).IsRequired(); } private void BuildProject(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.Code).IsRequired().HasMaxLength(50); builder.Property(x => x.Name).IsRequired().HasMaxLength(250); builder.Property(x => x.Description).HasMaxLength(500); builder.HasMany(x => x.Activities) .WithOne(x => x.Parent) .IsRequired(); } private void BuildRealization(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); builder.Property(x => x.Merged).IsRequired(); builder.Property(x => x.MergedToLinkSCM).HasMaxLength(500); builder.HasOne(x => x.Parent) .WithMany(x => x.Realizations) .IsRequired(); builder.HasMany(x => x.Attachments) .WithOne(x => x.Parent) .IsRequired(); builder.HasMany(x => x.Forks) .WithMany(); builder.HasMany(x => x.Environments) .WithMany(); builder.HasOne(x => x.BundleType) .WithMany() .IsRequired(); } } }