public void LogTableSchema_Default()
        {
            #region Arrange

            var connectionString = "CONNECTION STRING";

            var initScript = new StringBuilder($"IF OBJECT_ID(N'[{SqlLogSchema.DefaultTableName}]', N'U') IS NULL BEGIN ")
                             .Append($"CREATE TABLE [{SqlLogSchema.DefaultTableName}](")
                             .Append("[Id] BIGINT NOT NULL PRIMARY KEY IDENTITY,")
                             .Append("[Timestamp] DATETIME NOT NULL,")
                             .Append("[Message] VARCHAR(MAX) NOT NULL,")
                             .Append("[Exception] VARCHAR(MAX) NULL,")
                             .Append("[Level] INT NOT NULL")
                             .Append(") END")
                             .ToString();

            var record = new LogRecord(
                "msg",
                new System.DateTime(2000, 1, 2, 3, 4, 5),
                LogLevel.Info,
                new NotImplementedException()
                );

            var insertScript = $"INSERT INTO [{SqlLogSchema.DefaultTableName}]([Timestamp], [Message], [Exception], [Level]) VALUES("
                               + $"'{record.Timestamp:yyyy-MM-ddTHH:mm:ss.fff}','{record.Message}','{record.Exception.ToString()}',{(int)record.Level})";

            var defaultColumns = new[] {
                SqlLogSchema.IdColumn,
                SqlLogSchema.TimestampColumn,
                SqlLogSchema.MessageColumn,
                SqlLogSchema.ExceptionColumn,
                SqlLogSchema.LevelColumn
            };

            #endregion Arrange

            #region Act

            var ts          = new SqlLogSchema(connectionString);
            var insertQuery = ts.BuildInsertQuery(record);

            #endregion Act

            #region Assert

            Assert.AreEqual(connectionString, ts.ConnectionString);
            Assert.AreEqual(SqlLogSchema.DefaultTableName, ts.TableName);
            Assert.AreEqual(defaultColumns.Length, ts.Columns.Length);
            Assert.AreEqual(initScript, ts.InitScript);
            Assert.AreEqual(insertScript, insertQuery);

            #endregion Assert
        }
        public void LogTableSchema_CustomColumns()
        {
            #region Arrange

            var connectionString = "CONNECTION STRING";

            var newColumns = new[] {
                SqlLogSchema.MessageColumn,
                SqlLogSchema.ExceptionColumn
            };

            var initScript = new StringBuilder($"IF OBJECT_ID(N'[{SqlLogSchema.DefaultTableName}]', N'U') IS NULL BEGIN ")
                             .Append($"CREATE TABLE [{SqlLogSchema.DefaultTableName}](")
                             .Append("[Message] VARCHAR(MAX) NOT NULL,")
                             .Append("[Exception] VARCHAR(MAX) NULL")
                             .Append(") END")
                             .ToString();

            var record = new LogRecord(
                "msg",
                new System.DateTime(2000, 1, 2, 3, 4, 5),
                LogLevel.Info,
                new NotImplementedException()
                );

            var insertScript = $"INSERT INTO [{SqlLogSchema.DefaultTableName}]([Message], [Exception]) VALUES("
                               + $"'{record.Message}','{record.Exception.ToString()}')";

            #endregion Arrange

            #region Act

            var ts          = new SqlLogSchema(connectionString, columns: newColumns);
            var insertQuery = ts.BuildInsertQuery(record);

            #endregion Act

            #region Assert

            Assert.AreEqual(connectionString, ts.ConnectionString);
            Assert.AreEqual(newColumns.Length, ts.Columns.Length);
            Assert.AreEqual(initScript, ts.InitScript);
            Assert.AreEqual(insertScript, insertQuery);

            #endregion Assert
        }