using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata; namespace AyaNova.Models { public partial class AyContext : DbContext { public virtual DbSet SchemaVersion { get; set; } public virtual DbSet MetricMM { get; set; } public virtual DbSet MetricDD { get; set; } public virtual DbSet User { get; set; } public virtual DbSet UserOptions { get; set; } public virtual DbSet Widget { get; set; } public virtual DbSet GlobalBizSettings { get; set; } public virtual DbSet GlobalOpsBackupSettings { get; set; } public virtual DbSet GlobalOpsNotificationSettings { get; set; } public virtual DbSet Event { get; set; } public virtual DbSet SearchDictionary { get; set; } public virtual DbSet SearchKey { get; set; } public virtual DbSet FileAttachment { get; set; } public virtual DbSet OpsJob { get; set; } public virtual DbSet OpsJobLog { get; set; } public virtual DbSet Translation { get; set; } public virtual DbSet TranslationItem { get; set; } public virtual DbSet DataListView { get; set; } public virtual DbSet Tag { get; set; } public virtual DbSet FormCustom { get; set; } public virtual DbSet PickListTemplate { get; set; } public virtual DbSet License { get; set; } public virtual DbSet Customer { get; set; } public virtual DbSet Contract { get; set; } public virtual DbSet HeadOffice { get; set; } public virtual DbSet LoanUnit { get; set; } public virtual DbSet NotifySubscription { get; set; } public virtual DbSet NotifyEvent { get; set; } public virtual DbSet Notification { get; set; } public virtual DbSet NotifyDeliveryLog { get; set; } public virtual DbSet Part { get; set; } public virtual DbSet PM { get; set; } public virtual DbSet PMItem { get; set; } public virtual DbSet PMTemplate { get; set; } public virtual DbSet PMTemplateItem { get; set; } public virtual DbSet Project { get; set; } public virtual DbSet PurchaseOrder { get; set; } public virtual DbSet Quote { get; set; } public virtual DbSet QuoteItem { get; set; } public virtual DbSet QuoteTemplate { get; set; } public virtual DbSet QuoteTemplateItem { get; set; } public virtual DbSet Unit { get; set; } public virtual DbSet UnitModel { get; set; } public virtual DbSet Vendor { get; set; } //WorkOrder public virtual DbSet WorkOrder { get; set; } public virtual DbSet WorkOrderItem { get; set; } public virtual DbSet WorkOrderItemExpense { get; set; } public virtual DbSet WorkOrderItemLabor { get; set; } public virtual DbSet WorkOrderItemLoan { get; set; } public virtual DbSet WorkOrderItemPart { get; set; } public virtual DbSet WorkOrderItemPartRequest { get; set; } public virtual DbSet WorkOrderItemScheduledUser { get; set; } public virtual DbSet WorkOrderItemTask { get; set; } public virtual DbSet WorkOrderItemTravel { get; set; } public virtual DbSet WorkOrderItemUnit { get; set; } //WorkOrderTemplate public virtual DbSet WorkOrderTemplate { get; set; } public virtual DbSet WorkOrderTemplateItem { get; set; } public virtual DbSet Logo { get; set; } public virtual DbSet Report { get; set; } //Note: had to add this constructor to work with the code in startup.cs that gets the connection string from the appsettings.json file //and commented out the above on configuring public AyContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { //AUTOMATICALLY MATCH NAMES //https://andrewlock.net/customising-asp-net-core-identity-ef-core-naming-conventions-for-postgresql/ foreach (var entity in modelBuilder.Model.GetEntityTypes()) { // Replace table names //entity.Relational().TableName = "a" + entity.Relational().TableName.ToLowerInvariant(); entity.SetTableName("a" + entity.GetTableName().ToLowerInvariant()); // Replace column names foreach (var property in entity.GetProperties()) { //Any object that has a concurrencytoken field //set it up to work properly with PostgreSQL if (property.Name == "Concurrency") { property.SetColumnName("xmin"); property.SetColumnType("xid"); // property.Relational().ColumnName = "xmin"; // property.Relational().ColumnType = "xid"; property.ValueGenerated = ValueGenerated.OnAddOrUpdate; property.IsConcurrencyToken = true; } else property.SetColumnName(property.Name.ToLowerInvariant()); } foreach (var key in entity.GetKeys()) { key.SetName(key.GetName().ToLowerInvariant()); // key.Relational().Name = key.Relational().Name.ToLowerInvariant(); } foreach (var key in entity.GetForeignKeys()) { //key.Relational().Name = key.Relational().Name.ToLowerInvariant(); key.SetConstraintName(key.GetConstraintName().ToLowerInvariant()); } foreach (var index in entity.GetIndexes()) { index.SetName(index.GetName().ToLowerInvariant()); //index.Relational().Name = index.Relational().Name.ToLowerInvariant(); } } /////////////////////////////// //SERIALIZED OBJECTS // modelBuilder.Entity().Property(z => z.Serial).UseIdentityByDefaultColumn(); modelBuilder.Entity().Property(z => z.Serial).UseIdentityByDefaultColumn(); modelBuilder.Entity().Property(z => z.Serial).UseIdentityByDefaultColumn(); modelBuilder.Entity().Property(z => z.Serial).UseIdentityByDefaultColumn(); //modelBuilder.Entity().Property(z => z.Serial).UseIdentityByDefaultColumn(); //modelBuilder.Entity().HasNoKey(); /////////////////////////////////////////////////////////////////////// //TODO: this entire block is almost certainly wrong or not required // //Indexes must be specified through fluent api unfortunately // modelBuilder.Entity().HasIndex(z => z.StoredFileName); // //Relationships // modelBuilder.Entity() // .HasMany(z => z.TranslationItems) // .WithOne(z => z.Translation) // .IsRequired();//default delete behaviour is cascade when set to isrequired // modelBuilder.Entity() // .HasOne(z => z.UserOptions) // .WithOne(z => z.User) // .HasForeignKey(z => z.UserId) // .OnDelete(DeleteBehavior.Cascade);//Hopefully will delete the useroptions with the user? // //User->Widget Not certain about this definition // modelBuilder.Entity() // .HasOne(z => z.Widget) // .WithOne(z => z.User) // .HasForeignKey(z => z.UserId) // .OnDelete(DeleteBehavior.NoAction); ////////////////////////////////////////////////////////////// //----------- } } }