-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApplicationContext.cs
84 lines (70 loc) · 2.91 KB
/
ApplicationContext.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using IdentityServer4.EntityFramework.Options;
using Microsoft.AspNetCore.ApiAuthorization.IdentityServer;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.IO;
// Ref: https://stackoverflow.com/questions/59009996/add-migration-for-apiauthorizationdbcontext-from-another-project-ef-core
public class OperationalStoreOptionsMigrations :
IOptions<OperationalStoreOptions>
{
public OperationalStoreOptions Value => new OperationalStoreOptions()
{
DeviceFlowCodes = new TableConfiguration("DeviceCodes"),
EnableTokenCleanup = false,
PersistedGrants = new TableConfiguration("PersistedGrants"),
TokenCleanupBatchSize = 100,
TokenCleanupInterval = 3600,
};
}
public class DesignTimeDbContextFactory :
IDesignTimeDbContextFactory<ApplicationContext>
{
public ApplicationContext CreateDbContext(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var builder = new DbContextOptionsBuilder<ApplicationContext>();
builder
.UseLazyLoadingProxies()
.UseSqlite(configuration.GetConnectionString("DefaultConnection"));
return new ApplicationContext(builder.Options, new OperationalStoreOptionsMigrations(), configuration);
}
}
public class ApplicationContext : ApiAuthorizationDbContext<AppUser>
{
private readonly IConfiguration _configuration;
public virtual DbSet<Collection> Collections { get; set; }
public virtual DbSet<AppTask> Tasks { get; set; }
public ApplicationContext(
DbContextOptions options,
IOptions<OperationalStoreOptions> operationalStoreOptions,
IConfiguration configuration)
: base(options, operationalStoreOptions) => _configuration = configuration;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) =>
optionsBuilder.UseSqlite(_configuration.GetConnectionString("DefaultConnection"));
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Collection>()
.Property(p => p.CreationDate)
.HasDefaultValue(DateTime.Now);
builder.Entity<Collection>()
.Property(p => p.LastEdited)
.HasDefaultValue(DateTime.Now);
builder.Entity<AppTask>()
.Property(p => p.CreationDate)
.HasDefaultValue(DateTime.Now);
builder.Entity<AppTask>()
.Property(p => p.LastEdited)
.HasDefaultValue(DateTime.Now);
builder.Entity<Collection>()
.HasMany(p => p.Tasks)
.WithOne(t => t.Collection)
.OnDelete(DeleteBehavior.Cascade);
}
}