This repository was archived by the owner on Feb 5, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathApplicationDbContext.cs
97 lines (80 loc) · 3.04 KB
/
ApplicationDbContext.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
85
86
87
88
89
90
91
92
93
94
95
96
97
namespace BlogSystem.Data
{
using System;
using System.Linq;
using System.Data.Entity;
using Microsoft.AspNet.Identity.EntityFramework;
using BlogSystem.Data.Contracts;
using BlogSystem.Data.Models;
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base(nameOrConnectionString: "DefaultConnection", throwIfV1Schema: false)
{
}
public virtual IDbSet<Post> Posts { get; set; }
public virtual IDbSet<Comment> Comments { get; set; }
public virtual IDbSet<Page> Pages { get; set; }
public virtual IDbSet<Setting> Settings { get; set; }
public override int SaveChanges()
{
this.ApplyAuditInfoRules();
this.ApplyDeletableEntityRules();
return base.SaveChanges();
}
private void ApplyAuditInfoRules()
{
// Approach via @julielerman: http://bit.ly/123661P
foreach (var entry in
this.ChangeTracker.Entries()
.Where(
e =>
e.Entity is IAuditInfo && ((e.State == EntityState.Added) || (e.State == EntityState.Modified))))
{
var entity = (IAuditInfo) entry.Entity;
if (entry.State == EntityState.Added)
{
if (!entity.PreserveCreatedOn)
{
entity.CreatedOn = DateTime.Now;
}
}
else
{
entity.ModifiedOn = DateTime.Now;
}
}
}
private void ApplyDeletableEntityRules()
{
// Approach via @julielerman: http://bit.ly/123661P
foreach (
var entry in
this.ChangeTracker.Entries()
.Where(e => e.Entity is IDeletableEntity && (e.State == EntityState.Deleted)))
{
var entity = (IDeletableEntity) entry.Entity;
entity.DeletedOn = DateTime.Now;
entity.IsDeleted = true;
entry.State = EntityState.Modified;
}
}
public new IDbSet<TEntity> Set<TEntity>()
where TEntity : class
{
return base.Set<TEntity>();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>().HasRequired(c => c.Author).WithMany().WillCascadeOnDelete(false);
modelBuilder.Entity<Page>().HasRequired(c => c.Author).WithMany().WillCascadeOnDelete(false);
modelBuilder.Entity<Comment>().HasRequired(c => c.Author).WithMany().WillCascadeOnDelete(false);
modelBuilder.Entity<Comment>().HasRequired(c => c.Post).WithMany().WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}
}