AyCode.Core/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs

56 lines
2.5 KiB
C#

using AyCode.Database.ModelBuilders.Profiles;
using AyCode.Database.ModelBuilders.Users;
using AyCode.Interfaces.Addresses;
using AyCode.Interfaces.Messages;
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.ServiceProviders;
using AyCode.Interfaces.Users;
using Microsoft.EntityFrameworkCore;
namespace AyCode.Database.DbContexts.Users
{
public abstract class AcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider, TProfileAddress, TEmailMessage> : AcDbContextBase, IAcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider, TProfileAddress, TEmailMessage>
where TUser : class, IAcUser<TProfile, TServiceProvider, TUserToServiceProvider, TProfileAddress>
where TProfile : class, IAcProfile<TProfileAddress>
where TUserToken : class, IAcUserTokenBase
where TServiceProvider : class, IAcServiceProvider<TUser, TUserToServiceProvider>//IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
where TProfileAddress : class, IAcAddress
where TEmailMessage : class, IAcEmailMessageBase
{
public required DbSet<TUser> Users { get; set; }
public required DbSet<TUserToken> UserTokens { get; set; }
public DbSet<TProfileAddress> Addresses { get; set; }
public DbSet<TProfile> Profiles { get; set; }
public DbSet<TEmailMessage> EmailMessages { get; set; }
protected AcUserDbContextBase() : this(string.Empty)
{ }
protected AcUserDbContextBase(string name) : base(name)
{ }
protected AcUserDbContextBase(DbContextOptions<DbContext> options, string name) : base(options, name)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseLazyLoadingProxies(true);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
new AcUserEntityTypeDefaultConfiguration<TUser, TProfile, TServiceProvider, TUserToServiceProvider, TProfileAddress>().Configure(modelBuilder.Entity<TUser>());
new AcProfileEntityTypeDefaultConfiguration<TProfile, TProfileAddress>().Configure(modelBuilder.Entity<TProfile>());
//new EmailMessageEntityTypeDefaultConfigurations().Configure(modelBuilder.Entity<EmailMessage>());
}
}
}