如何使用Cache obect缓存数据asp.net mvc

时间:2015-06-16 11:38:51

标签: c# asp.net asp.net-mvc-4 caching

我在我的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;要缓存的选项。

1 个答案:

答案 0 :(得分:1)

这是因为您正在使用对缓存对象的引用。 如果更改对象,它将反映缓存数据的更改。

Asp.Net Cache, modify an object from cache and it changes the cached value

您必须克隆对象或创建新对象并复制属性值(您可以使用AutoMapper为您执行此操作)

希望它有所帮助。