我在我的asp.net应用程序中使用数据缓存。 这是我的ICacheProvider.cs接口
MMU descriptors
这就是我在服务中使用缓存的方式。
public interface ICacheProvider
{
object Get(string key);
void Set(string key, object data, int cacheTime);
bool IsSet(string key);
void Invalidate(string key);
}
在控制器中,我使用这样的退回员工。
public List<EmployeeLookUp> GetEmployeeLookUp(RecordStatusEnum recordStatusEnum, int locatioId)
{
var status = (int)recordStatusEnum;
var employeeData = Cache.Get("EmployeeLookUp") as IEnumerable;
if (employeeData == null)
{
var result = MyDb.Employee.Where(w => w.Status == status && w.LocationId == locatioId).ToList().Select(s => new EmployeeLookUp()
{
EmployeeId = s.EmployeeId,
DepartmentId = s.DepartmentId,
EmployeeValue = string.Format("{0}{1}{2} {3} {4}", "[", s.CustomEmployeeId, "]", s.FirstName, s.LastName)
}).ToList();
if (result.Any())
Cache.Set("EmployeeLookUp", result, 30);
return result;
}
return (List<EmployeeLookUp>) employeeData;
}
现在我的问题是,当我多次重新加载页面时,额外的&#34;全部&#34;我在员工选择列表中另外添加的选项已多次添加到缓存对象(&#34; EmployeeLookUp&#34;)中。这怎么可能?我不想要&#34; All&#34;要缓存的选项。
答案 0 :(得分:1)
这是因为您正在使用对缓存对象的引用。 如果更改对象,它将反映缓存数据的更改。
Asp.Net Cache, modify an object from cache and it changes the cached value
您必须克隆对象或创建新对象并复制属性值(您可以使用AutoMapper为您执行此操作)
希望它有所帮助。