using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using System; namespace Timeline.Entities { public class DatabaseContext : DbContext { public DatabaseContext(DbContextOptions options) : base(options) { if (Database.IsSqlite()) { var connection = (SqliteConnection)Database.GetDbConnection(); connection.CreateFunction("timeline_create_guid", () => Guid.NewGuid().ToString()); } else { throw new InvalidOperationException(Resources.Entities.ExceptionOnlySqliteSupported); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().Property(e => e.Version).HasDefaultValue(0); modelBuilder.Entity().HasIndex(e => e.Username).IsUnique(); modelBuilder.Entity().HasIndex(e => e.Tag).IsUnique(); modelBuilder.Entity().Property(e => e.UniqueId).HasDefaultValueSql("timeline_create_guid()"); } public DbSet Users { get; set; } = default!; public DbSet UserAvatars { get; set; } = default!; public DbSet Timelines { get; set; } = default!; public DbSet TimelinePosts { get; set; } = default!; public DbSet TimelineMembers { get; set; } = default!; public DbSet JwtToken { get; set; } = default!; public DbSet Data { get; set; } = default!; } }