63 lines
1.9 KiB
C#
63 lines
1.9 KiB
C#
namespace YLErp.Modules.DataCacheModule
|
|
{
|
|
public static partial class DataCacheManager
|
|
{
|
|
class VarietyDataSource : GenericeCachedDataSource<Variety>, Abstract.IDataSourceKey2<Variety>
|
|
{
|
|
public override string TableName => nameof(Variety);
|
|
|
|
readonly Dictionary<string, Variety> _dicEx;
|
|
|
|
private VarietyDataSource()
|
|
{
|
|
_dicEx = new Dictionary<string, Variety>(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();
|
|
}
|
|
}
|
|
}
|
|
}
|