Files
Aperio_Control_Centre/Aperio_Control_Centre.ACSDatabase/ACSDatabaseContext.cs
2025-10-17 08:48:13 +02:00

700 lines
25 KiB
C#

using Aperio_Control_Centre.ACSDatabase.Models;
using Microsoft.EntityFrameworkCore;
namespace Aperio_Control_Centre.ACSDatabase
{
public partial class ACSDatabaseContext(DbContextOptions<ACSDatabaseContext> options) : DbContext(options)
{
public DbSet<Models.Department> Departments { get; set; } = null!;
public DbSet<Models.Device> Devices { get; set; } = null!;
public DbSet<Models.DeviceGroup> DeviceGroups { get; set; } = null!;
//old group
[Obsolete("Old user groups")]
public DbSet<Models.DeviceGroupJoin> DeviceGroupJoins { get; set; } = null!;
//new group
public DbSet<Models.DeviceGroupJoin2> DeviceGroupJoins2 { get; set; } = null!;
public DbSet<Models.GlobalSetting> GlobalSettings { get; set; } = null!;
[Obsolete("Old user groups")]
public DbSet<Models.Group> Groups { get; set; } = null!;
public DbSet<Models.Location> Locations { get; set; } = null!;
public DbSet<Models.Logging> Loggings { get; set; } = null!;
public DbSet<Models.Timezone> Timezones { get; set; } = null!;
public DbSet<Models.User> Users { get; set; } = null!;
public DbSet<Models.UserGroup> UserGroups { get; set; } = null!;
public DbSet<Models.UserGroupJoin> UserGroupJoins { get; set; } = null!;
public DbSet<Models.AuthorizationEntry> AuthorizationMatrix { get; set; } = null!;
public DbSet<Models.DoorModeSchedule> DoorModeSchedules { get; set; } = null!;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//Debug.WriteLine($"OnConfiguring IsConfigured={optionsBuilder.IsConfigured}");
if (!optionsBuilder.IsConfigured)
{
//optionsBuilder.UseSqlServer(_configuration.GetConnectionString("ACSDatabaseConnection"));
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//Debug.WriteLine("OnModelCreating");
modelBuilder.Entity<Models.Department>(entity =>
{
entity.ToTable("Departments");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("Name")
.IsRequired(true);
entity.Property(e => e.Info)
.HasMaxLength(500)
.HasColumnName("Info");
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired(true);
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired(true);
});
modelBuilder.Entity<Models.Device>(entity =>
{
entity.ToTable("Devices");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.DeviceId)
.HasColumnName("DeviceID")
.HasMaxLength(10)
.IsRequired(true);
entity.Property(e => e.HubId)
.HasColumnName("HubID")
.HasMaxLength(10);
entity.Property(e => e.Ipaddress)
.HasColumnName("Ipaddress")
.HasMaxLength(50);
entity.Property(e => e.Name)
.HasColumnName("Name")
.HasMaxLength(50)
.IsRequired(true);
entity.Property(e => e.Info)
.HasColumnName("Info")
.HasMaxLength(500);
entity.OwnsMany<SupportedDoorMode>(e => e.DoorModes, b =>
{
b.ToJson();
});
//entity.OwnsMany<DoorModeSchedulerItem>(e => e.DoorModeScheduler, b => { b.ToJson().Ignore(x => x.TimeZone); });
//entity.OwnsMany<DoorModeSchedulerItem>(e => e.DoorModeScheduler, b =>
//{
// b.ToJson();
// //b.Ignore(x => x.TimeZone);
// //b.OwnsOne(t => t.Timezone);
//});
entity.Property(e => e.ProductClass)
.HasColumnName("ProductClass");
entity.Property(e => e.DoorState)
.HasColumnName("DoorState");
entity.Property(e => e.LockState)
.HasColumnName("LockState");
entity.Property(e => e.HandleState)
.HasColumnName("HandleState");
entity.Property(e => e.KeyCylinderState)
.HasColumnName("KeyCylinderState");
entity.Property(e => e.TamperState)
.HasColumnName("TamperState");
entity.Property(e => e.BatteryState)
.HasColumnName("BatteryState");
entity.Property(e => e.EmergencyInsideState)
.HasColumnName("EmergencyInsideState");
entity.Property(e => e.EmergencyOutsideState)
.HasColumnName("EmergencyOutsideState");
entity.Property(e => e.ConnectionState)
.HasColumnName("ConnectionState");
entity.Property(e => e.UnlockTime)
.HasColumnName("UnlockTime");
entity.Property(e => e.UnlockTimezoneId)
.HasColumnName("UnlockTimezone_Id");
entity.Property(e => e.LocationId)
.HasColumnName("Location_Id");
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired(true);
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired();
entity.Property(e => e.LastData)
.HasColumnType("datetime")
.HasColumnName("LastData");
entity.HasMany(e => e.DeviceGroups)
.WithMany(e => e.Devices)
.UsingEntity<DeviceGroupJoin2>(
l => l.HasOne<DeviceGroup>().WithMany().HasForeignKey(e => e.DeviceGroupId),
j => j.HasOne<Device>().WithMany().HasForeignKey(e => e.DeviceId)
);
entity.HasIndex(e => e.LocationId, "IX_FK_Devices_Locations");
entity.HasIndex(e => e.UnlockTimezoneId, "IX_FK_Devices_Timezones");
entity.HasIndex(e => e.DeviceId, "NonClusteredIndex-Device_Id");
entity.HasOne(d => d.Location)
.WithMany(p => p.Devices)
.HasForeignKey(d => d.LocationId)
.HasConstraintName("FK_Devices_Locations");
entity.HasOne(d => d.UnlockTimezone)
.WithMany(p => p.Devices)
.HasForeignKey(d => d.UnlockTimezoneId)
.HasConstraintName("FK_Devices_Timezones");
});
modelBuilder.Entity<Models.DeviceGroup>(entity =>
{
entity.ToTable("DeviceGroups");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("Name")
.IsRequired();
entity.Property(e => e.Info)
.HasMaxLength(500)
.HasColumnName("Info");
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired();
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired();
entity.HasMany(e => e.Devices)
.WithMany(e => e.DeviceGroups)
.UsingEntity<DeviceGroupJoin2>(
l => l.HasOne<Device>().WithMany().HasForeignKey(e => e.DeviceId),
j => j.HasOne<DeviceGroup>().WithMany().HasForeignKey(e => e.DeviceGroupId)
);
entity.HasMany(e => e.Authorizations)
.WithOne(e => e.DeviceGroup)
.HasForeignKey(e => e.DeviceGroupId)
.HasPrincipalKey(e => e.Id)
.IsRequired();
});
//new group
modelBuilder.Entity<Models.DeviceGroupJoin2>(entity =>
{
entity.ToTable("DeviceGroupJoins2");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.DeviceGroupId).HasColumnName("DeviceGroup_Id");
entity.Property(e => e.DeviceId).HasColumnName("Device_Id");
});
//old group
modelBuilder.Entity<Models.DeviceGroupJoin>(entity =>
{
entity.HasIndex(e => e.DeviceId, "IX_FK_DeviceGroupJoins_Device");
entity.HasIndex(e => e.GroupId, "IX_FK_DeviceGroupJoins_Group");
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.DeviceId).HasColumnName("Device_Id");
entity.Property(e => e.GroupId).HasColumnName("Group_Id");
entity.HasOne(d => d.Device)
.WithMany(p => p.DeviceGroupJoins)
.HasForeignKey(d => d.DeviceId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_DeviceGroupJoins_Device");
entity.HasOne(d => d.Group)
.WithMany(p => p.DeviceGroupJoins)
.HasForeignKey(d => d.GroupId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_DeviceGroupJoins_Group");
});
modelBuilder.Entity<Models.GlobalSetting>(entity =>
{
entity.ToTable("GlobalSettings");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("Name");
entity.Property(e => e.Value)
.HasMaxLength(500)
.HasColumnName("Value");
});
modelBuilder.Entity<Models.Group>(entity =>
{
entity.ToTable("Groups");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("Name")
.IsRequired();
entity.Property(e => e.Info)
.HasMaxLength(500)
.HasColumnName("Info");
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired();
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired();
entity.Property(e => e.TimezoneId)
.HasColumnName("Timezone_Id")
.IsRequired();
entity.HasOne(d => d.Timezone)
.WithMany(p => p.Groups)
//.HasForeignKey("Timezone_Id")
.HasForeignKey(d => d.TimezoneId)
//.IsRequired()
//.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Timezones_Groups");
//entity.HasOne(d => d.Timezone)
// .WithMany(p => p.Groups)
// .HasForeignKey(d => d.TimezoneId)
// .OnDelete(DeleteBehavior.ClientSetNull)
// .HasConstraintName("FK_Timezones_Groups");
});
modelBuilder.Entity<Models.Location>(entity =>
{
entity.ToTable("Locations");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Street)
.HasMaxLength(50)
.HasColumnName("Street");
entity.Property(e => e.Nr)
.HasMaxLength(10)
.HasColumnName("Nr");
entity.Property(e => e.City)
.HasMaxLength(50)
.HasColumnName("City");
entity.Property(e => e.Zipcode)
.HasMaxLength(10)
.HasColumnName("Zipcode");
entity.Property(e => e.Province)
.HasMaxLength(50)
.HasColumnName("Province");
entity.Property(e => e.Country)
.HasMaxLength(50)
.HasColumnName("Country");
entity.Property(e => e.City)
.HasMaxLength(50)
.HasColumnName("City");
entity.Property(e => e.Latitude)
.HasMaxLength(12)
.HasColumnName("Latitude");
entity.Property(e => e.Longitude)
.HasMaxLength(12)
.HasColumnName("Longitude");
entity.Property(e => e.Info)
.HasMaxLength(500)
.HasColumnName("Info");
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired(true);
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired(true);
});
modelBuilder.Entity<Models.Logging>(entity =>
{
entity.ToTable("Loggings");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Time)
.HasColumnType("datetime")
.HasColumnName("Time")
.IsRequired(true);
entity.Property(e => e.UserName)
.HasMaxLength(50)
.HasColumnName("UserName");
entity.Property(e => e.Message)
.HasMaxLength(200)
.HasColumnName("Message");
entity.Property(e => e.CredentialString)
.HasMaxLength(50)
.HasColumnName("CredentialString");
entity.Property(e => e.CredentialType)
.HasColumnName("CredentialType");
entity.Property(e => e.Access)
.HasColumnName("Access");
entity.Property(e => e.LogType)
.HasColumnName("LogType");
entity.HasIndex(e => e.LogType, "NonClusteredIndex-LogType");
entity.Property(e => e.DeviceId).HasColumnName("Device_Id");
entity.HasIndex(e => e.DeviceId, "IX_FK_DevicesLoggingsX");
entity.HasIndex(e => e.DeviceId, "NonClusteredIndex-Device_Id");
entity.HasOne(d => d.Device)
.WithMany(p => p.Loggings)
.HasForeignKey(d => d.DeviceId)
.HasConstraintName("FK_DevicesLoggingsX");
entity.Property(e => e.UserId).HasColumnName("User_Id");
entity.HasIndex(e => e.UserId, "IX_FK_UsersLoggingsX");
entity.HasIndex(e => e.UserId, "NonClusteredIndex-User_Id");
entity.HasOne(d => d.User)
.WithMany(p => p.Loggings)
.HasForeignKey(d => d.UserId)
.HasConstraintName("FK_UsersLoggingsX");
});
modelBuilder.Entity<Models.Timezone>(entity =>
{
entity.ToTable("Timezones");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("Name")
.IsRequired(true);
entity.Property(e => e.BeginTime)
//.HasColumnType("timespan")
.HasColumnName("BeginTime");
entity.Property(e => e.EndTime)
//.HasColumnType("timespan")
.HasColumnName("EndTime");
entity.Property(e => e.WeekDays)
.HasColumnName("WeekDays");
entity.Property(e => e.TwentyFourHours)
.HasColumnName("TwentyFourHours");
entity.Property(e => e.Info)
.HasMaxLength(500)
.HasColumnName("Info")
.IsRequired(false);
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired(true);
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired(true);
entity.Ignore(e => e.Monday);
entity.Ignore(e => e.Tuesday);
entity.Ignore(e => e.Wednesday);
entity.Ignore(e => e.Thursday);
entity.Ignore(e => e.Friday);
entity.Ignore(e => e.Saturday);
entity.Ignore(e => e.Sunday);
entity.Ignore(e => e.AllDays);
entity.Ignore(e => e.WholeDayTime);
entity.Ignore(e => e.GetTimezoneString);
entity.Ignore(e => e.GetWeekdayShortString);
//entity.Ignore(e => e.IsTimezoneActive2);
entity.HasMany(e => e.Authorizations)
.WithOne(e => e.Timezone)
.HasForeignKey(e => e.TimezoneId)
.HasPrincipalKey(e => e.Id)
.IsRequired();
});
modelBuilder.Entity<Models.User>(entity =>
{
entity.ToTable("Users");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.CredentialString)
.HasMaxLength(50)
.HasColumnName("CredentialString")
.IsRequired(true);
entity.HasIndex(e => e.CredentialString, "NonClusteredIndex-CredentialString");
entity.Property(e => e.CredentialType)
.HasColumnName("CredentialType")
.IsRequired(true);
entity.Property(e => e.PassNumber)
.HasColumnName("PassNumber");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("Name")
.IsRequired(true);
entity.Property(e => e.SubLine)
.HasMaxLength(50)
.HasColumnName("SubLine");
entity.Property(e => e.Info)
.HasMaxLength(500)
.HasColumnName("Info")
.IsRequired(false);
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired(true);
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired(true);
entity.Property(e => e.Created)
.HasColumnType("datetime")
.HasColumnName("Created")
.IsRequired(true);
entity.Property(e => e.Dordrecht)
.HasColumnName("Dordrecht");
entity.HasMany(e => e.UserGroups)
.WithMany(e => e.Users)
.UsingEntity<UserGroupJoin>(
l => l.HasOne<UserGroup>().WithMany().HasForeignKey(e => e.UserGroupId),
j => j.HasOne<User>().WithMany().HasForeignKey(e => e.UserId)
);
entity.Property(e => e.Watched)
.HasColumnName("Watched")
.IsRequired(false);
entity.Property(e => e.Expires)
.HasColumnName("Expires")
.IsRequired(false);
entity.HasIndex(e => e.DepartmentId, "IX_FK_Users_Departments");
entity.HasIndex(e => e.GroupId, "IX_FK_Users_Groups");
entity.Property(e => e.DepartmentId).HasColumnName("Department_Id");
entity.Property(e => e.GroupId).HasColumnName("Group_Id");
entity.Property(e => e.Info).HasMaxLength(500);
entity.HasOne(d => d.Department)
.WithMany(p => p.Users)
.HasForeignKey(d => d.DepartmentId)
.HasConstraintName("FK_Users_Departments");
entity.HasOne(d => d.Group)
.WithMany(p => p.Users)
.HasForeignKey(d => d.GroupId)
.HasConstraintName("FK_Users_Groups");
});
modelBuilder.Entity<Models.UserGroup>(entity =>
{
entity.ToTable("UserGroups");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Name)
.HasMaxLength(50)
.HasColumnName("Name")
.IsRequired();
entity.Property(e => e.Info)
.HasMaxLength(500)
.HasColumnName("Info");
entity.Property(e => e.Active)
.HasColumnName("Active")
.IsRequired();
entity.Property(e => e.LastChanged)
.HasColumnType("datetime")
.HasColumnName("LastChanged")
.IsRequired();
entity.HasMany(e => e.Users)
.WithMany(e => e.UserGroups)
.UsingEntity<UserGroupJoin>(
l => l.HasOne<User>().WithMany().HasForeignKey(e => e.UserId),
j => j.HasOne<UserGroup>().WithMany().HasForeignKey(e => e.UserGroupId)
);
entity.HasMany(e => e.Authorizations)
.WithOne(e => e.UserGroup)
.HasForeignKey(e => e.UserGroupId)
.HasPrincipalKey(e => e.Id)
.IsRequired();
});
modelBuilder.Entity<Models.UserGroupJoin>(entity =>
{
entity.ToTable("UserGroupJoins");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.UserGroupId).HasColumnName("UserGroup_Id");
entity.Property(e => e.UserId).HasColumnName("User_Id");
});
modelBuilder.Entity<Models.AuthorizationEntry>(entity =>
{
entity.ToTable("AuthorizationMatrix");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.UserGroupId).HasColumnName("UserGroup_Id");
entity.Property(e => e.DeviceGroupId).HasColumnName("DeviceGroup_Id");
entity.Property(e => e.TimezoneId).HasColumnName("Timezone_Id");
//entity.Navigation(e => e.UserGroup).HasField("UserGroup_Id");
//entity.HasMany(e => e.UserGroup)
//entity.HasOne(e => e.UserGroup)
// .WithMany(e => e.Authorizations)
// .HasForeignKey(e => e.UserGroupId)
// .HasPrincipalKey(e => e.Id)
// .IsRequired();
});
modelBuilder.Entity<DoorModeSchedule>(entity =>
{
entity.ToTable("DoorModeSchedules");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.DeviceId).HasColumnName("Device_Id").IsRequired(true);
entity.Property(e => e.DoorMode).HasColumnName("DoorMode").IsRequired(true);
entity.Property(e => e.TimezoneId).HasColumnName("Timezone_Id").IsRequired(true);
entity.HasOne(d => d.Device)
.WithMany(p => p.DoorModeSchedules)
.HasForeignKey(d => d.DeviceId);
entity.HasOne(d => d.Timezone)
.WithMany(p => p.DoorModeSchedules)
.HasForeignKey(d => d.TimezoneId);
});
}
}
}