Created
July 16, 2021 17:43
-
-
Save manoj-choudhari-git/95dd10ff70301b1854a569727bb3cee5 to your computer and use it in GitHub Desktop.
.NET - A demo showing how to consume .NET Events provided by EF Core DbContext
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class UniversityContext : DbContext | |
{ | |
public UniversityContext(DbContextOptions<UniversityContext> options) | |
: base(options) | |
{ | |
ChangeTracker.Tracked += ChangeTracker_Tracked; | |
ChangeTracker.StateChanged += ChangeTracker_StateChanged; | |
SavingChanges += UniversityContext_SavingChanges; | |
SavedChanges += UniversityContext_SavedChanges; | |
SaveChangesFailed += UniversityContext_SaveChangesFailed; | |
} | |
private void ChangeTracker_Tracked(object sender, EntityTrackedEventArgs e) | |
{ | |
Console.WriteLine($"Marked for Tracking: {e.Entry.Entity}"); | |
} | |
private void ChangeTracker_StateChanged(object sender, EntityStateChangedEventArgs e) | |
{ | |
// YOU CAN USE AN INTERFACE OR A BASE CLASS | |
// But, for this demo, we are directly typecasting to Student model | |
var student = e.Entry.Entity as Student; | |
switch (e.Entry.State) | |
{ | |
case EntityState.Deleted: | |
student.DeletedOn = DateTime.Now; | |
Console.WriteLine($"Marked for delete: {e.Entry.Entity}"); | |
break; | |
case EntityState.Modified: | |
student.ModifiedOn = DateTime.Now; | |
Console.WriteLine($"Marked for update: {e.Entry.Entity}"); | |
break; | |
case EntityState.Added: | |
student.CreatedOn = DateTime.Now; | |
Console.WriteLine($"Marked for insert: {e.Entry.Entity}"); | |
break; | |
} | |
} | |
private void UniversityContext_SavingChanges(object sender, SavingChangesEventArgs e) | |
{ | |
Console.WriteLine($"Saving Changes at {DateTime.Now}"); | |
} | |
private void UniversityContext_SavedChanges(object sender, SavedChangesEventArgs e) | |
{ | |
Console.WriteLine($"Saved Chagnes at {DateTime.Now}"); | |
} | |
private void UniversityContext_SaveChangesFailed(object sender, SaveChangesFailedEventArgs e) | |
{ | |
Console.WriteLine($"Save Chagnes Failed at {DateTime.Now}"); | |
} | |
public DbSet<Student> Students { get; set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment