Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }