public async Task <bool> AddCultureAsync(string culture, string description)
        {
            string providerConnectionString       = "";
            List <ResourceString> resourceStrings = null;

            using (var ctx = GetContext())
            {
                // Get all original resources for all branches (no tracking, we make no changes)
                resourceStrings = await ctx.ResourceStrings.AsNoTracking()
                                  .ToListAsync()
                                  .ConfigureAwait(false);

                // And get the connection string
                providerConnectionString = ctx.GetProviderConnectionString();
            }

            DateTime     updateTime = DateTime.UtcNow;
            const string updatedBy  = "system/add language";

            var translationProjection = resourceStrings.Select(s => new Translation()
            {
                FK_BranchId        = s.FK_BranchId,
                FK_ResourceFileId  = s.FK_ResourceFileId,
                ResourceIdentifier = s.ResourceIdentifier,
                Culture            = culture,
                TranslatedValue    = null,
                OriginalResxValueChangedSinceTranslation = true,
                OriginalResxValueAtTranslation           = s.ResxValue,
                LastUpdated   = updateTime,
                LastUpdatedBy = updatedBy
            });

            using (var conn = new SqlConnection(providerConnectionString))
            {
                await conn.OpenAsync();

                using (var sqlTxn = conn.BeginTransaction())
                {
                    var cmd =
                        new SqlCommand("INSERT INTO Languages(Culture,Description) VALUES(@param1,@param2)", conn, sqlTxn);

                    cmd.Parameters.Add(new SqlParameter("@param1", culture));
                    cmd.Parameters.Add(new SqlParameter("@param2", description));

                    try
                    {
                        await cmd.ExecuteNonQueryAsync();

                        var bcp = new Overby.Data.BulkInserter <Translation>(conn, "Translations",
                                                                             5000, SqlBulkCopyOptions.Default, sqlTxn);

                        bcp.Insert(translationProjection);

                        sqlTxn.Commit();
                        return(true);
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError(ex.ToString());
                        sqlTxn.Rollback();
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }

            return(false);
        }
        public async Task<bool> AddCultureAsync(string culture, string description)
        {
            string providerConnectionString = "";
            List<ResourceString> resourceStrings = null;

            using (var ctx = GetContext())
            {
                // Get all original resources for all branches (no tracking, we make no changes)
                resourceStrings = await ctx.ResourceStrings.AsNoTracking()
                    .ToListAsync()
                    .ConfigureAwait(false);

                // And get the connection string
                providerConnectionString = ctx.GetProviderConnectionString();
            }

            DateTime updateTime = DateTime.UtcNow;
            const string updatedBy = "system/add language";

            var translationProjection = resourceStrings.Select(s => new Translation()
            {
                FK_BranchId = s.FK_BranchId,
                FK_ResourceFileId = s.FK_ResourceFileId,
                ResourceIdentifier = s.ResourceIdentifier,
                Culture = culture,
                TranslatedValue = null,
                OriginalResxValueChangedSinceTranslation = true,
                OriginalResxValueAtTranslation = s.ResxValue,
                LastUpdated = updateTime,
                LastUpdatedBy = updatedBy
            });

            using (var conn = new SqlConnection(providerConnectionString))
            {
                await conn.OpenAsync();

                using (var sqlTxn = conn.BeginTransaction())
                {
                    var cmd =
                        new SqlCommand("INSERT INTO Languages(Culture,Description) VALUES(@param1,@param2)", conn, sqlTxn);

                    cmd.Parameters.Add(new SqlParameter("@param1", culture));
                    cmd.Parameters.Add(new SqlParameter("@param2", description));

                    try
                    {
                        await cmd.ExecuteNonQueryAsync();

                        var bcp = new Overby.Data.BulkInserter<Translation>(conn, "Translations",
                            5000, SqlBulkCopyOptions.Default, sqlTxn);

                        bcp.Insert(translationProjection);

                        sqlTxn.Commit();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError(ex.ToString());
                        sqlTxn.Rollback();
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }

            return false;
        }