Example #1
0
        /// <summary>
        /// Saves an event into the store
        /// </summary>
        /// <param name="event">The event to be saved</param>
        protected override void _Save(DomainEvent @event)
        {
            var eventType = @event.GetType();
            var tableName = this.Settings.UseSingleTable ? "Events" : eventType.Name;

            using (var connection = new SqlConnection(this.Settings.ConnectionString))
            {
                connection.CreateOrUpdateTable(@event, eventType, tableName, this.Settings.AutoIncrementalTableMigrations, this.Settings.UseCompression, this.Settings.UseSingleTable);
            }

            var parametersData = @event.GetParametersData(eventType, this.Settings.UseCompression, this.Settings.UseSingleTable);

            var parameters = parametersData.Select(ParameterDataExtensions.ToSqlParameter);

            var commandText = Commands.BuildInsertCommandText(tableName, parametersData.Select(t => t.Name).ToArray(), parameters.Select(parameter => parameter.ParameterName).ToArray());

            using (var connection = new SqlConnection(this.Settings.ConnectionString))
            {
                connection.ExecuteNonQuery(commandText, parameters);
            }
        }