C# 实体框架缓存我的值吗?
我正在尝试首先更新EF代码中的实体 我在单击按钮时运行此代码C# 实体框架缓存我的值吗?,c#,entity-framework,C#,Entity Framework,我正在尝试首先更新EF代码中的实体 我在单击按钮时运行此代码 bool result if (hasPrivilege == true)result = userManager.RemoveUserPrivilege(Username, privilege, out errors); else result = userManager.GiveUserPrivilege(Username, privilege, out errors); 然后检查该方法是否成功,并更新我的特权列表,使其显示新值
bool result
if (hasPrivilege == true)result = userManager.RemoveUserPrivilege(Username, privilege, out errors);
else result = userManager.GiveUserPrivilege(Username, privilege, out errors);
然后检查该方法是否成功,并更新我的特权列表,使其显示新值
if (result == false) txtBlkErrorMessages.Text = string.Join("\n", errors);
else
{
privilegeCache = privileges.GetAll(int.MaxValue).Where(prv => prv.Username == Username).OrderBy(prv => prv.PrivilegeName).ToList();
DisplayInDataGid();
}
问题是第一部分成功地更新了数据库(我已经设置了一个断点并对数据库运行了一个查询。但是第二部分仍然检索以前的值
例如,如果我选择了一个为true的特权,然后单击按钮,它应该删除该特权,然后立即显示该特权为false,但它只是显示它为true
如果我关闭窗口,然后再次打开,该值将显示新窗口
我尝试过将privilgeCache对象设置为null,然后获得特权。没有乐趣
此处为该实体的实体类:
最后,更新方法的存储库代码是:
public bool UpdateUserPrivilege(string username, string privilege, bool hasPrivilege)
{
//GET THE ACCOUNT
UserPrivilege acct = GetByKeys(new string[] { username, privilege });
//IF AN ACCOUNT WAS FOUND
if (acct != null)
{
//UPDATE THE FIELDS
acct.HoldsPrivilege = hasPrivilege;
}
bool success = (Database.SaveChanges() > 0);
//SAVE THE CHANGES
return success;
}
我觉得这是两件事之一:
- Visual Studio 2013
- C#4.5
- MYSQL数据库
我希望有人能提供帮助!您的问题可能与数据库上下文管理有关。您能否添加处理数据库创建的代码(从(Database.SaveChanges()>0);)。如何填充/来自特权列表(从in-privilegeCache=privileges.GetAll(int.MaxValue)…)?我使用一个通用的基本存储库来实现此方法:-:公共虚拟IList GetAll(int numToGet){return Database.Set().Take(numToGet.ToList();}实体类型是UserPrivilegeOk,不要忘记可以添加处理数据库属性的代码(from(Database.SaveChanges()>0)?;)
try
{
userPrivilegeRepository.UpdateUserPrivilege(username, privilege, hasPrivilege);
logger.WriteLog(LogTitle.UserPrivilegeUpdated, LogLevels.Information, LogData);
return true;
}
catch (Exception ex)
{
errors.Add(string.Format(ErrorMessages.ErrorOccured, "Updating a user privilege"));
logger.WriteLog(LogTitle.ExceptionThrown, LogLevels.Critical, LogData, ex);
return false;
}
public bool UpdateUserPrivilege(string username, string privilege, bool hasPrivilege)
{
//GET THE ACCOUNT
UserPrivilege acct = GetByKeys(new string[] { username, privilege });
//IF AN ACCOUNT WAS FOUND
if (acct != null)
{
//UPDATE THE FIELDS
acct.HoldsPrivilege = hasPrivilege;
}
bool success = (Database.SaveChanges() > 0);
//SAVE THE CHANGES
return success;
}