Search code examples
c#asp.net-mvcentity-frameworkcatch-all

Entity Framework Caching Issue


I am new to Entity Framework.

I have get to some values in my database using EF. It returns perfectly, and the values are shown in labels. But When I delete all values in my table (without using EF), the EF query is returning my old values. I know the EF stores the values in cache and returns the cached data for subsequent runs. Is this correct?

So how can I solve the problem when I have deleted all values in my database, but EF returns the old values?

Edit:

Now i used datamodel.SaveChanges(). But now also it's returning the same old values.

My sample query is look like below:

SchoolBriefcaseEntities datamodel = new SchoolBriefcaseEntities();
datamodel.SaveChanges();
List<Compliance> compliance=new List<Compliance>();
IList<ComplianceModel> complianceModel;
if (HttpContext.Current.User.IsInRole("SuperAdmin"))
{
    compliance = datamodel.Compliances.Where(c => c.School.DistrictId == districtId).ToList();
}

Solution

  • If you know that changes happened outside of EF and want to refresh your ctxt for a specific entity, you can call ObjectContext.Refresh

    datamodel.Refresh(RefreshMode.StoreWins, orders);
    

    If this seems like it will be a common occurrence, you should disable object caching in your queries:

    SchoolBriefcaseEntities datamodel = new SchoolBriefcaseEntities();
    datamodel.tblCities.MergeOption = MergeOption.NoTracking; 
    

    or to turn off object level caching for specific Entity:

    Context.Set<Compliances>().AsNoTracking();