public override void ExecuteCommand()
        {
            Log.Info(
                "Delete the user account and all packages for '{0}'.",
                Username);

            using (var sqlConnection = new SqlConnection(ConnectionString))
            using (var dbExecutor = new SqlExecutor(sqlConnection))
            {
                sqlConnection.Open();

                var user = Util.GetUser(dbExecutor, Username);

                if (user == null)
                {
                    Log.Error("User was not found");
                    return;
                }

                Log.Info("User found with EmailAddress '{0}' and UnconfirmedEmailAddress '{1}'",
                    user.EmailAddress, user.UnconfirmedEmailAddress);

                var packageCount = user.PackageRegistrationIds.Count();
                var packageNumber = 0;

                foreach (var packageId in user.PackageRegistrationIds)
                {
                    Log.Info("Deleting package '{0}' because '{1}' is the sole owner. ({2}/{3})",
                        packageId, Username, ++packageNumber, packageCount);

                    var deletePackageTask = new DeleteAllPackageVersionsTask
                    {
                        ConnectionString = ConnectionString,
                        StorageAccount = StorageAccount,
                        PackageId = packageId,
                        WhatIf = WhatIf
                    };

                    deletePackageTask.Execute();
                }

                Log.Info("Deleting remaining package ownership records (from shared ownership)");

                if (!WhatIf)
                {
                    dbExecutor.Execute(
                        "DELETE pro FROM PackageRegistrationOwners pro WHERE pro.UserKey = @userKey",
                        new { userKey = user.Key });
                }

                Log.Info("Deleting package ownership requests");

                if (!WhatIf)
                {
                    dbExecutor.Execute(
                        "DELETE por FROM PackageOwnerRequests por WHERE @userKey IN (por.NewOwnerKey, por.RequestingOwnerKey)",
                        new { userKey = user.Key });
                }

                Log.Info("Deleting the user record itself");

                if (!WhatIf)
                {
                    dbExecutor.Execute(
                        "DELETE u FROM Users u WHERE u.[Key] = @userKey",
                        new { userKey = user.Key });
                }

                Log.Info(
                    "Deleted all packages owned solely by '{0}' as well as the user record."
                    , user.Username);
            }
        }
        public override void ExecuteCommand()
        {
            Log.Info(
                "Delete the user account and all packages for '{0}'.",
                Username);

            using (var sqlConnection = new SqlConnection(ConnectionString.ConnectionString))
                using (var dbExecutor = new SqlExecutor(sqlConnection))
                {
                    sqlConnection.Open();

                    var user = Util.GetUser(dbExecutor, Username);

                    if (user == null)
                    {
                        Log.Error("User was not found");
                        return;
                    }

                    Log.Info("User found with EmailAddress '{0}' and UnconfirmedEmailAddress '{1}'",
                             user.EmailAddress, user.UnconfirmedEmailAddress);

                    var packageCount  = user.PackageRegistrationIds.Count();
                    var packageNumber = 0;

                    foreach (var packageId in user.PackageRegistrationIds)
                    {
                        Log.Info("Deleting package '{0}' because '{1}' is the sole owner. ({2}/{3})",
                                 packageId, Username, ++packageNumber, packageCount);

                        var deletePackageTask = new DeleteAllPackageVersionsTask
                        {
                            ConnectionString = ConnectionString,
                            StorageAccount   = StorageAccount,
                            PackageId        = packageId,
                            WhatIf           = WhatIf
                        };

                        deletePackageTask.Execute();
                    }

                    Log.Info("Deleting remaining package ownership records (from shared ownership)");

                    if (!WhatIf)
                    {
                        dbExecutor.Execute(
                            "DELETE pro FROM PackageRegistrationOwners pro WHERE pro.UserKey = @userKey",
                            new { userKey = user.Key });
                    }

                    Log.Info("Deleting package ownership requests");

                    if (!WhatIf)
                    {
                        dbExecutor.Execute(
                            "DELETE por FROM PackageOwnerRequests por WHERE @userKey IN (por.NewOwnerKey, por.RequestingOwnerKey)",
                            new { userKey = user.Key });
                    }

                    Log.Info("Deleting the user record itself");

                    if (!WhatIf)
                    {
                        dbExecutor.Execute(
                            "DELETE u FROM Users u WHERE u.[Key] = @userKey",
                            new { userKey = user.Key });
                    }

                    Log.Info(
                        "Deleted all packages owned solely by '{0}' as well as the user record."
                        , user.Username);
                }
        }