public void TestCacheStrategy2() { using (var db = new TrackerContext()) { var role1 = CreateRole("Joe 1"); var role2 = CreateRole("Joe 2"); var role3 = CreateRole("Bob 3"); db.Roles.Add(role1); db.Roles.Add(role2); db.Roles.Add(role3); db.SaveChanges(); db.Roles.Delete(o => o.Name.StartsWith("J"), CacheStrategy.None); db.SaveChanges(); db.Roles.Local.Where(o => o.Id == role1.Id).Should().NotBeEmpty(); db.Roles.Local.Where(o => o.Id == role2.Id).Should().NotBeEmpty(); db.Roles.Local.Where(o => o.Id == role3.Id).Should().NotBeEmpty(); db.Roles.Where(o => o.Name.StartsWith("J")).Should().BeEmpty(); db.Roles.Where(o => o.Id == role3.Id).Should().NotBeEmpty(); } }
public void TestCacheStrategy2() { using (var db = new TrackerContext()) { var role1 = CreateRole("Joe 1"); var role2 = CreateRole("Joe 2"); var role3 = CreateRole("Bob 3"); db.Roles.Add(role1); db.Roles.Add(role2); db.Roles.Add(role3); db.SaveChanges(); db.Roles.Update(o => o.Name.StartsWith("J"), o => new Role { Description = "Updated joe" }, CacheStrategy.None); db.SaveChanges(); db.Roles.Local.Where(o => o.Id == role1.Id).Should().NotBeEmpty(); db.Roles.Local.Where(o => o.Id == role2.Id).Should().NotBeEmpty(); db.Roles.Local.Where(o => o.Id == role3.Id).Should().NotBeEmpty(); db.Roles.Where(o => o.Name.StartsWith("J") && o.Description != "Updated joe").Should().BeEmpty(); db.Roles.Where(o => o.Id == role3.Id && o.Description == role3.Name).Should().NotBeEmpty(); } }
public void CreateLog3() { AuditConfiguration.Default.IncludeRelationships = true; AuditConfiguration.Default.LoadRelationships = true; AuditConfiguration.Default.IsAuditable<Task>(); AuditConfiguration.Default.IsAuditable<User>(); var db = new TrackerContext(); var audit = db.BeginAudit(); var user = new User(); user.EmailAddress = string.Format("email.{0}@test.com", DateTime.Now.Ticks); user.CreatedDate = DateTime.Now; user.ModifiedDate = DateTime.Now; user.PasswordHash = DateTime.Now.Ticks.ToString(); user.PasswordSalt = "abcde"; user.IsApproved = false; user.LastActivityDate = DateTime.Now; db.Users.Add(user); var log = audit.CreateLog(); Assert.IsNotNull(log); string beforeXml = log.ToXml(); Assert.IsNotNull(beforeXml); db.SaveChanges(); log.Refresh(); string afterXml = log.ToXml(); Assert.IsNotNull(afterXml); }
public void MaintainAcrossSaves() { var auditConfiguration = AuditConfiguration.Default; auditConfiguration.IncludeRelationships = true; auditConfiguration.LoadRelationships = true; auditConfiguration.DefaultAuditable = true; auditConfiguration.MaintainAcrossSaves = true; // customize the audit for Task entity //auditConfiguration.IsAuditable<Task>() // .NotAudited(t => t.TaskExtended) // .FormatWith(t => t.Status, v => FormatStatus(v)); // set name as the display member when status is a foreign key auditConfiguration.IsAuditable<Status>() .DisplayMember(t => t.Name); var db = new TrackerContext(); var tran = db.BeginTransaction(); var audit = db.BeginAudit(); var user = db.Users.Find(1); user.Comment = "Testing: " + DateTime.Now.Ticks; var task = new Task() { AssignedId = 1, StatusId = 1, PriorityId = 2, Summary = "Summary: " + DateTime.Now.Ticks, CreatedId = 1, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; db.Tasks.Add(task); db.SaveChanges(); Assert.IsNotNull(audit.LastLog); Assert.AreEqual(2, audit.LastLog.Entities.Count); var task2 = db.Tasks.Find(1); task2.PriorityId = 2; task2.StatusId = 2; task2.Summary = "Summary: " + DateTime.Now.Ticks; db.SaveChanges(); Assert.IsNotNull(audit.LastLog); Assert.AreEqual(3, audit.LastLog.Entities.Count); var log = audit.LastLog; Assert.IsNotNull(log); string xml = log.ToXml(); Assert.IsNotNull(xml); foreach (var property in log.Entities.SelectMany(e => e.Properties)) { Assert.AreNotEqual(property.Current, "{error}"); Assert.AreNotEqual(property.Original, "{error}"); } //undo work tran.Rollback(); }
public void Update() { AuditConfiguration.Default.IncludeRelationships = true; AuditConfiguration.Default.LoadRelationships = true; AuditConfiguration.Default.IsAuditable<Task>(); AuditConfiguration.Default.IsAuditable<User>().NotAudited(p => p.Avatar); var db = new TrackerContext(); var audit = db.BeginAudit(); var user = new User(); user.EmailAddress = string.Format("email.{0}@test.com", DateTime.Now.Ticks); user.CreatedDate = DateTime.Now; user.ModifiedDate = DateTime.Now; user.PasswordHash = DateTime.Now.Ticks.ToString(); user.PasswordSalt = "abcde"; user.IsApproved = false; user.LastActivityDate = DateTime.Now; db.Users.Add(user); var log = audit.CreateLog(); Assert.IsNotNull(log); string beforeXml = log.ToXml(); Assert.IsNotNull(beforeXml); db.SaveChanges(); log.Refresh(); foreach (var property in log.Entities.SelectMany(e => e.Properties)) { Assert.AreNotEqual(property.Current, "{error}"); Assert.AreNotEqual(property.Original, "{error}"); } string afterXml = log.ToXml(); Assert.IsNotNull(afterXml); var lastLog = audit.LastLog; var lastXml = lastLog.Refresh().ToXml(); Assert.IsNotNull(lastXml); Console.WriteLine(lastXml); user.EmailAddress = string.Format("update.{0}@test.com", DateTime.Now.Ticks); var updateLog = audit.CreateLog(); Assert.IsNotNull(updateLog); foreach (var property in log.Entities.SelectMany(e => e.Properties)) { Assert.AreNotEqual(property.Current, "{error}"); Assert.AreNotEqual(property.Original, "{error}"); } db.SaveChanges(); var updateXml = updateLog.ToXml(); Assert.IsNotNull(updateXml); Console.WriteLine(updateXml); }
public void LogWithNullableRelationWithoutValueAndAllreadyLoadedRelation() { var auditConfiguration = AuditConfiguration.Default; auditConfiguration.IncludeRelationships = true; auditConfiguration.LoadRelationships = true; auditConfiguration.DefaultAuditable = true; auditConfiguration.MaintainAcrossSaves = false; auditConfiguration.IsAuditable<Task>(); auditConfiguration.IsAuditable<Priority>().DisplayMember(t => t.Name); var db = new TrackerContext(); var tran = db.Database.BeginTransaction(); var audit = db.BeginAudit(); var task = new Task() { AssignedId = 1, StatusId = 1, Priority = null, Summary = "Summary: " + DateTime.Now.Ticks, CreatedId = 1, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now, }; db.Tasks.Add(task); var entries = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added); var relation = entries.First().RelationshipManager.GetRelatedReference<Priority>("Tracker.SqlServer.CodeFirst.Task_Priority", "Task_Priority_Target"); relation.Load(); db.SaveChanges(); foreach (var property in audit.LastLog.Entities.SelectMany(e => e.Properties)) { Assert.NotEqual(property.Current, "{error}"); Assert.NotEqual(property.Original, "{error}"); } //undo work tran.Rollback(); }
public void LogWithNullableRelations() { var auditConfiguration = AuditConfiguration.Default; auditConfiguration.IncludeRelationships = true; auditConfiguration.LoadRelationships = true; auditConfiguration.DefaultAuditable = true; auditConfiguration.MaintainAcrossSaves = false; auditConfiguration.IsAuditable<Task>(); auditConfiguration.IsAuditable<Priority>().DisplayMember(t => t.Name); var db = new TrackerContext(); var tran = db.Database.BeginTransaction(); var audit = db.BeginAudit(); var task = new Task() { AssignedId = 1, StatusId = 1, PriorityId = 2, Summary = "Summary: " + DateTime.Now.Ticks, CreatedId = 1, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now, }; db.Tasks.Add(task); db.SaveChanges(); foreach (var property in audit.LastLog.Entities.SelectMany(e => e.Properties)) { Assert.NotEqual(property.Current, "{error}"); Assert.NotEqual(property.Original, "{error}"); } task.PriorityId = null; db.SaveChanges(); foreach (var property in audit.LastLog.Entities.SelectMany(e => e.Properties)) { Assert.NotEqual(property.Current, "{error}"); Assert.NotEqual(property.Original, "{error}"); } task.PriorityId = 1; db.SaveChanges(); foreach (var property in audit.LastLog.Entities.SelectMany(e => e.Properties)) { Assert.NotEqual(property.Current, "{error}"); Assert.NotEqual(property.Original, "{error}"); } task.PriorityId = 2; db.SaveChanges(); foreach (var property in audit.LastLog.Entities.SelectMany(e => e.Properties)) { Assert.NotEqual(property.Current, "{error}"); Assert.NotEqual(property.Original, "{error}"); } //undo work tran.Rollback(); }