Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架缓存我的值吗?_C#_Entity Framework - Fatal编程技术网

C# 实体框架缓存我的值吗?

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); 然后检查该方法是否成功,并更新我的特权列表,使其显示新值

我正在尝试首先更新EF代码中的实体

我在单击按钮时运行此代码

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;
}
我觉得这是两件事之一:

  • EF正在某个地方缓存该值,如果是,如何清除缓存
  • 不久前我和EF designer在visual studio中遇到了一个问题,实体的键弄脏了东西,但我不知道如何安全地更改此实体上的键
  • 我正在使用:

    • 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;
    }