using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Audit; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Deployment; using ZB.MOM.WW.ScadaBridge.Commons.Entities.ExternalSystems; using ZB.MOM.WW.ScadaBridge.Commons.Entities.InboundApi; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Instances; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Notifications; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Scripts; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Security; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Sites; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Templates; using ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Entities; namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase; public class ScadaBridgeDbContext : DbContext, IDataProtectionKeyContext { private readonly IDataProtectionProvider? _dataProtectionProvider; /// /// Initializes a new instance of the class for schema-only access (design-time). /// /// Database context options. public ScadaBridgeDbContext(DbContextOptions options) : base(options) { } /// /// Creates a context with an explicit Data Protection provider used to encrypt /// secret-bearing configuration columns at rest. The runtime resolves this overload /// via DI; design-time tooling uses the single-argument overload. /// /// Database context options. /// Data Protection provider for encrypting secrets at rest. public ScadaBridgeDbContext(DbContextOptions options, IDataProtectionProvider dataProtectionProvider) : base(options) { _dataProtectionProvider = dataProtectionProvider ?? throw new ArgumentNullException(nameof(dataProtectionProvider)); } // Templates /// Gets the set of templates. public DbSet