using Gremlin_BlazorServer.Data.EntityClasses; using Microsoft.EntityFrameworkCore; namespace Gremlin_BlazorServer.Data.DBClasses; public class GremlinDb : DbContext { public DbSet? Contacts { get; set; } public DbSet? SalesReps { get; set; } public DbSet? Accounts { get; set; } public DbSet? Quotes { get; set; } public DbSet? Products { get; set; } public DbSet? LineItems { get; set; } public DbSet? CustomDescriptions { get; set; } public DbSet? ProductLines { get; set; } public DbSet? AccountTypes { get; set; } public DbSet? SubMarkets { get; set; } public DbSet? RuSettings { get; set; } public DbSet? RegisteredUser { get; set; } public DbSet? Opportunities { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { const string connectionString = "server=woitschetzki.de;port=3308;database=regulus;user=sascha;password=mgltoJtmmDnKJ86LltsGdw;SslMode=;SslCa="; optionsBuilder.LogTo(Console.WriteLine); try { optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), options => options.EnableRetryOnFailure()).EnableSensitiveDataLogging().EnableDetailedErrors(); } catch (Exception e) { Console.WriteLine(e); OnConfiguring(optionsBuilder); throw; } } // void ConfigureAutoIncludeFor(ModelBuilder modelBuilder) where T: class // { // var type = typeof(T); // // foreach (var property in type.GetProperties()) // { // if (typeof(IMetadata).IsAssignableFrom(property.PropertyType) // || // property.PropertyType.IsGenericType // && typeof(IList<>).IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition())) // { // modelBuilder.Entity().Navigation(e => property.GetValue(e)).AutoInclude(); // } // } // } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); ////alle Fluent-Konfigurationen aufrufen: //TO BE TESTED! _ = modelBuilder.ApplyConfigurationsFromAssembly(typeof(GremlinDb).Assembly); //Create missing tables modelBuilder.Entity().ToTable("Opportunites"); //AutoInclude all NavigationParameters in Entities // _ = modelBuilder.Entity().Navigation(db => db.Contacts).AutoInclude(); // _ = modelBuilder.Entity().Navigation(db => db.AccountType).AutoInclude(); // _ = modelBuilder.Entity().Navigation(db => db.SubMarket).AutoInclude(); // _ = modelBuilder.Entity().Navigation(db => db.CustomDescriptions).AutoInclude(); //modelBuilder.Entity().Navigation(db => db.Account).AutoInclude(); //modelBuilder.Entity().Navigation(db => db.Quotes).AutoInclude(); //Takes too much time //modelBuilder.Entity().Navigation(db => db.Products).AutoInclude(); //modelBuilder.Entity().Navigation(db => db.LineItems).AutoInclude(); //modelBuilder.Entity().Navigation(db => db.Recipient).AutoInclude(); // _ = modelBuilder.Entity().Navigation(db => db.CustomDescription).AutoInclude(); // _ = modelBuilder.Entity().Navigation(db => db.ProductLine).AutoInclude(); //Generic AutoInclude method not yet working //ConfigureAutoIncludeFor(modelBuilder); ////Fluent-Konfiguration einzeln für eine Entity aufrufen: //new AccountConfiguration().Configure(modelBuilder.Entity()); //new ContactConfiguration().Configure(modelBuilder.Entity()); //new QuoteConfiguration().Configure(modelBuilder.Entity()); //new ProductConfiguration().Configure(modelBuilder.Entity()); //new LineItemConfiguration().Configure(modelBuilder.Entity()); //new CustomDescriptionConfiguration().Configure(modelBuilder.Entity()); //new ProductLineConfiguration().Configure(modelBuilder.Entity()); //new AccountTypeConfiguration().Configure(modelBuilder.Entity()); //new SubMarketConfiguration().Configure(modelBuilder.Entity()); } }