public void CaptureChanges() { using (var cn = LocalDb.GetConnection(dbName)) { var emp = new Employee() { LastName = "Herbert", FirstName = "Yavad", HireDate = new DateTime(1990, 1, 1), IsExempt = true }; // need to make sure record doesn't exist try { cn.Execute("TRUNCATE TABLE [changes].[RowVersion]"); } catch { /*do nothing */ } try { cn.Execute("TRUNCATE TABLE [changes].[ColumnHistory]"); } catch { /* do nothing */ } cn.Execute("DELETE [dbo].[Employee] WHERE [FirstName]=@firstName AND [LastName]=@lastName", emp); var provider = new SqlServerCrudProvider <int>((id) => Convert.ToInt32(id)); provider.SaveAsync(cn, emp).Wait(); LoggedChangeTracker <Employee, long> ct = GetLoggedChangeTracker(cn, emp); emp.FirstName = "Javad"; emp.Status = Status.Inactive; provider.SaveAsync(cn, emp, ct).Wait(); Assert.IsTrue(cn.RowExistsAsync("[changes].[RowVersion] WHERE [TableName]='Employee' AND [RowId]=1 AND [Version]=1").Result); Assert.IsTrue(cn.RowExistsAsync("[changes].[ColumnHistory] WHERE [TableName]='Employee' AND [RowId]=1 AND [Version]=1 AND [ColumnName]='FirstName' AND [OldValue]='Yavad' AND [NewValue]='Javad'").Result); Assert.IsTrue(cn.RowExistsAsync("[changes].[ColumnHistory] WHERE [TableName]='Employee' AND [RowId]=1 AND [Version]=1 AND [ColumnName]='Status' AND [OldValue]='Active' AND [NewValue]='Inactive'").Result); } }
public void TextLookupChanges() { using (var cn = LocalDb.GetConnection(dbName)) { DataModel.CreateTablesAsync(new Type[] { typeof(WidgetType), typeof(Widget) }, cn).Wait(); cn.Execute("DELETE [dbo].[Widget]"); cn.Execute("DELETE [dbo].[WidgetType]"); var provider = new SqlServerCrudProvider <int>((id) => Convert.ToInt32(id)); HashSet <int> ids = new HashSet <int>(); Array.ForEach(new[] { "this", "that", "other" }, (name) => { ids.Add(provider.Save(cn, new WidgetType() { Name = name })); }); var w = new Widget() { Description = "this new thing", TypeId = ids.First(), Price = 23.4m }; int widgetId = provider.Save(cn, w); var ct = GetLoggedChangeTracker(cn, w); w.Price = 21.7m; w.TypeId = ids.Last(); provider.SaveAsync(cn, w, ct).Wait(); Assert.IsTrue(cn.RowExistsAsync("[changes].[ColumnHistory] WHERE [TableName]='Widget' AND [RowId]=@widgetId AND [ColumnName]='Price' AND [OldValue]='23.4' AND [NewValue]='21.7'", new { widgetId }).Result); Assert.IsTrue(cn.RowExistsAsync("[changes].[ColumnHistory] WHERE [TableName]='Widget' AND [RowId]=@widgetId AND [ColumnName]='TypeId' AND [OldValue]='this' AND [NewValue]='other'", new { widgetId }).Result); } }