-
-
Notifications
You must be signed in to change notification settings - Fork 158
/
Copy pathAppDbContext.cs
79 lines (65 loc) · 3.12 KB
/
AppDbContext.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
using JsonApiDotNetCoreExample.Models;
using Microsoft.EntityFrameworkCore;
namespace JsonApiDotNetCoreExample.Data
{
public class AppDbContext : DbContext
{
public DbSet<TodoItem> TodoItems { get; set; }
public DbSet<Passport> Passports { get; set; }
public DbSet<Person> People { get; set; }
public DbSet<TodoItemCollection> TodoItemCollections { get; set; }
public DbSet<CamelCasedModel> CamelCasedModels { get; set; }
public DbSet<Article> Articles { get; set; }
public DbSet<Author> AuthorDifferentDbContextName { get; set; }
public DbSet<NonJsonApiResource> NonJsonApiResources { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<SuperUser> SuperUsers { get; set; }
public DbSet<PersonRole> PersonRoles { get; set; }
public DbSet<ArticleTag> ArticleTags { get; set; }
public DbSet<IdentifiableArticleTag> IdentifiableArticleTags { get; set; }
public DbSet<Tag> Tags { get; set; }
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SuperUser>().HasBaseType<User>();
modelBuilder.Entity<TodoItem>()
.Property(t => t.CreatedDate).HasDefaultValueSql("CURRENT_TIMESTAMP").IsRequired();
modelBuilder.Entity<TodoItem>()
.HasOne(t => t.Assignee)
.WithMany(p => p.AssignedTodoItems)
.HasForeignKey(t => t.AssigneeId);
modelBuilder.Entity<TodoItem>()
.HasOne(t => t.Owner)
.WithMany(p => p.TodoItems)
.HasForeignKey(t => t.OwnerId);
modelBuilder.Entity<ArticleTag>()
.HasKey(bc => new { bc.ArticleId, bc.TagId });
modelBuilder.Entity<IdentifiableArticleTag>()
.HasKey(bc => new { bc.ArticleId, bc.TagId });
modelBuilder.Entity<Person>()
.HasOne(t => t.StakeHolderTodo)
.WithMany(t => t.StakeHolders)
.HasForeignKey(t => t.StakeHolderTodoId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<TodoItem>()
.HasOne(t => t.DependentTodoItem);
modelBuilder.Entity<TodoItem>()
.HasMany(t => t.ChildrenTodoItems)
.WithOne(t => t.ParentTodoItem)
.HasForeignKey(t => t.ParentTodoItemId);
modelBuilder.Entity<Passport>()
.HasOne(p => p.Person)
.WithOne(p => p.Passport)
.HasForeignKey<Person>(p => p.PassportId)
.OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<TodoItem>()
.HasOne(p => p.ToOnePerson)
.WithOne(p => p.ToOneTodoItem)
.HasForeignKey<TodoItem>(p => p.ToOnePersonId);
modelBuilder.Entity<Person>()
.HasOne(p => p.ToOneTodoItem)
.WithOne(p => p.ToOnePerson)
.HasForeignKey<TodoItem>(p => p.ToOnePersonId);
}
}
}