namespace YLErp.Modules.DataCacheModule { public static partial class DataCacheManager { class VarietyDataSource : GenericeCachedDataSource, Abstract.IDataSourceKey2 { public override string TableName => nameof(Variety); readonly Dictionary _dicEx; private VarietyDataSource() { _dicEx = new Dictionary(StringComparer.OrdinalIgnoreCase); } public Variety GetData(string varietyCode) { if (string.IsNullOrWhiteSpace(varietyCode)) { return null; } lock (this) { if (_dicEx.TryGetValue(varietyCode, out var variety)) { var clone = variety.Clone(); return clone; } using (var db = DbContextFactory.GetYLDbContext()) { var va = db.variety.AsNoTracking().FirstOrDefault(n => n.VarietyCode == varietyCode); if (va != null) { _dic[va.id] = va; AfterUpdateHandle(va); } return va?.Clone(); } } } private void AfterUpdateHandle(Variety data) { if (string.IsNullOrWhiteSpace(data.VarietyCode)) { return; } _dicEx[data.VarietyCode] = data; } public static readonly VarietyDataSource Default; static VarietyDataSource() { Default = new VarietyDataSource(); } } } }