public SyncProcessor(IResxLoader resourceFileLoader, RftContext ctx) { _resourceFileLoader = resourceFileLoader; _resourceReader = new ResxStringResourceReader(); GetContext = () => ctx; }
public void ReadFromBranch500() { using (var txScope = new TransactionScope()) { using (var ctx = new RftContext()) { var translations = ctx.Translations.Where(t => t.FK_BranchId == 500).ToList(); Assert.That(translations.Count, Is.EqualTo(2)); //ctx.Translations.RemoveRange(translations); //ctx.SaveChanges(); } } }
// Why Add & Update in one method: because of the way how we don't delete translations // It could be that on adding a "new" resource, it already exists as translation from a previous commit & rollback public void AddOrUpdateTranslationsForResourceString(RftContext ctx, ResourceString dbRes) { int branchId = dbRes.FK_BranchId; int resourceFileId = dbRes.FK_ResourceFileId; string resourceIdentifier = dbRes.ResourceIdentifier; string resxValue = dbRes.ResxValue; foreach (var l in _languages) { string culture = l.Culture; var currentTranslation = ctx.Translations .FirstOrDefault(t => t.FK_ResourceFileId == resourceFileId && t.ResourceIdentifier == resourceIdentifier && t.Culture == culture && t.FK_BranchId == branchId); int excludeTranslationId = -1; if (currentTranslation != null) { // we are reviving an existing translation for this resource string excludeTranslationId = currentTranslation.Id; } else { currentTranslation = new Translation() { FK_BranchId = branchId, FK_ResourceFileId = resourceFileId, ResourceIdentifier = resourceIdentifier, Culture = culture, OriginalResxValueAtTranslation = resxValue, LastUpdated = DateTime.UtcNow, LastUpdatedBy = "sync task" }; ctx.Translations.Add(currentTranslation); } var mergeFromTranslation = ctx.Translations .Where(t => t.ResourceIdentifier == resourceIdentifier && t.OriginalResxValueAtTranslation == resxValue && // NOTE: this is SQL Server comparing here!!! t.Culture == culture) .OrderByDescending(t => t.LastUpdated) .FirstOrDefault(); // Note: mergeFromTranslation may be equal to currentTranslation when reviving a translation if (null == mergeFromTranslation) { if (-1 == excludeTranslationId) { currentTranslation.TranslatedValue = null; } currentTranslation.OriginalResxValueChangedSinceTranslation = true; } else { currentTranslation.OriginalResxValueChangedSinceTranslation = false; currentTranslation.TranslatedValue = mergeFromTranslation.TranslatedValue; currentTranslation.LastUpdated = mergeFromTranslation.LastUpdated; currentTranslation.LastUpdatedBy = mergeFromTranslation.LastUpdatedBy; } } }