Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data Annotations - Caching #52

Open
MathieuDR opened this issue May 29, 2018 · 3 comments
Open

Data Annotations - Caching #52

MathieuDR opened this issue May 29, 2018 · 3 comments

Comments

@MathieuDR
Copy link

I'm using ASP.NET Core 2 together with this adaptation of AspNetCoreLocalization. I'm however a bit 'stuck' on resetting the cache for my data annotation translations.

When I reset the cache, everything is updated (global translations (custom) and my resource translations) however, my data annotations refuse to be 'updated', even though they should be used as resource translations (stock behaviour).

const bool useTypeFullNames = false;
const bool useOnlyPropertyNames = false;
const bool returnOnlyKeyIfNotFound = false;
bool createNewRecord = env.IsDevelopment();
            

services.AddDapperLocalization(options => options.UseSettings(
       useTypeFullNames, useOnlyPropertyNames, returnOnlyKeyIfNotFound, createNewRecord
));

services.AddMvc()
       .AddViewLocalization()
       .AddDataAnnotationsLocalization()
       .AddRazorOptions(options => { options.PageViewLocationFormats.Add("/Pages/Partials/{0}.cshtml"); });

Is there any way I can also make the data annotation translations reset cache?

@velorium-star
Copy link

+1 Exactly this happens to me also.

@sihon82
Copy link

sihon82 commented Jan 30, 2020

I had same problem... seems to be a problem with DataAnnotation resource that in some way continue to reference the first ISqlLocalizer object created, also after cleaning the internal cache dictionary.

I solved in this way:

SqlStringLocalizerFactory.cs :


public void ResetCache()
        {
            lock (_context)
            {
                _context.DetachAllEntities();
            }

            foreach (String localizerKey in _resourceLocalizations.Keys)
            {
                SqlStringLocalizer localizer = _resourceLocalizations[localizerKey] as SqlStringLocalizer;

                localizer.ReloadLocalizations(GetAllFromDatabaseForResource(localizerKey));
            }
        }

        public void ResetCache(Type resourceSource)
        {
            lock (_context)
            {
                _context.DetachAllEntities();
            }

            IStringLocalizer returnValue;
            
            if (_resourceLocalizations.TryGetValue(resourceSource.FullName, out returnValue))
            {
                SqlStringLocalizer localizer = _resourceLocalizations[resourceSource.FullName] as SqlStringLocalizer;

                localizer.ReloadLocalizations(GetAllFromDatabaseForResource(resourceSource.FullName));
            }

            
        }

SqlStringLocalizer.cs:

private Dictionary<string, string> _localizations; //Removed readonly

public void ReloadLocalizations(Dictionary<string, string> localizations)
        {
            if (_localizations != null)
                _localizations.Clear();

            _localizations = localizations;
        }

@damienbod damienbod added the bug label Feb 7, 2020
@JoeGoodwin
Copy link

Could this bug fix be implemented please?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants