public async Task<ActionResult> Save(ReplaceableModel model)
        {
            ValidateRequired("Key", model.Key);
            ValidateAlphanumeric("Key", model.Key);
            ValidateRequired("LanguageCode", model.LanguageCode);
            ValidateRequired("Value", model.Value);

            if (!ModelState.IsValid)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

            await _replaceablesManager.Save(model);
            return new HttpStatusCodeResult(HttpStatusCode.OK);
        }
        public Task Save(ReplaceableModel model)
        {
            var mapped = ReplaceableModel.Map<Replaceable>(model);

            if (IdentityMap.ContainsKey(mapped.GetLocator()))
            {
                mapped.Id = IdentityMap[mapped.GetLocator()];
                _replaceableStore.Save(mapped, mapped.Id);
            }
            else
            {
                var id = _replaceableStore.Save(mapped);
                IdentityMap.Add(mapped.GetLocator(), id);
            }

            return Task.FromResult(0);
        }
        public Task Save(ReplaceableModel replaceable)
        {
            _replaceableRepository.Save(replaceable);

            var cacheKey = GetCacheKey(replaceable.LanguageCode);
            var cached = _cacheManager.Get(cacheKey) as Dictionary<string, string>;
            if (cached == null) return Task.FromResult(0);

            if (cached.ContainsKey(replaceable.Key))
            {
                cached[replaceable.Key] = replaceable.Value;
            }
            else
            {
                cached.Add(replaceable.Key, replaceable.Value);
            }

            UpdateCache(cacheKey, cached);

            return Task.FromResult(0);
        }