57 lines
2.6 KiB
C#
57 lines
2.6 KiB
C#
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Metadata;
|
|
using TeleWave.Application.Common.Interfaces;
|
|
using TeleWave.Domain.Auth;
|
|
using TeleWave.Domain.Broadcast;
|
|
using TeleWave.Domain.Images;
|
|
using TeleWave.Domain.Library;
|
|
using TeleWave.Domain.Media;
|
|
using TeleWave.Domain.Settings;
|
|
using TeleWave.Infrastructure.Identity;
|
|
|
|
namespace TeleWave.Infrastructure.Persistence;
|
|
|
|
/// <summary>
|
|
/// Корневой DbContext приложения: Identity-схема (пользователи/роли) + сущности домена
|
|
/// (добавляются по мере реализации фич).
|
|
/// </summary>
|
|
public class AppDbContext(DbContextOptions<AppDbContext> options)
|
|
: IdentityDbContext<AppUser, AppRole, Guid>(options),
|
|
IAppDbContext
|
|
{
|
|
public DbSet<RefreshToken> RefreshTokens => Set<RefreshToken>();
|
|
public DbSet<MediaAsset> MediaAssets => Set<MediaAsset>();
|
|
public DbSet<Show> Shows => Set<Show>();
|
|
public DbSet<Channel> Channels => Set<Channel>();
|
|
public DbSet<ScheduleEntry> ScheduleEntries => Set<ScheduleEntry>();
|
|
public DbSet<BumperTextVariant> BumperTextVariants => Set<BumperTextVariant>();
|
|
public DbSet<BumperAsset> BumperAssets => Set<BumperAsset>();
|
|
public DbSet<AppSetting> AppSettings => Set<AppSetting>();
|
|
public DbSet<Image> Images => Set<Image>();
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
|
|
|
|
// Guid-ключи доменных сущностей мы задаём сами в фабриках. Без этого EF считает выставленный
|
|
// ключ признаком уже существующей строки и при добавлении дочерней сущности через коллекцию
|
|
// отслеживаемого родителя (напр. show.AddEpisode) делает UPDATE вместо INSERT → «affected 0».
|
|
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
|
|
{
|
|
if (
|
|
entityType.ClrType.Namespace?.StartsWith(
|
|
"TeleWave.Domain",
|
|
StringComparison.Ordinal
|
|
) != true
|
|
)
|
|
continue;
|
|
|
|
var idProperty = entityType.FindProperty("Id");
|
|
if (idProperty is not null && idProperty.ClrType == typeof(Guid))
|
|
idProperty.ValueGenerated = ValueGenerated.Never;
|
|
}
|
|
}
|
|
}
|