我正在開發我的第一個ASP.NET MVC 4項目,使用C#和實體框架,我希望實現自定義成員身份&角色,使用我自己的SQL Server數據庫和表。ASP.NET MVC 4 - 自定義會員和角色實體不更新
我開發了兩個類,分別稱爲'CustomMembershipProvider'(繼承MembershipProvider)和'CustomRoleProvider'(繼承RoleProvider)。這兩個類在第一次執行時似乎都能正常工作,但是當我手動更新SQL Server中的字段時(例如更改正確名稱或正確描述),我在實體上執行的LINQ查詢似乎已過時。
爲了清楚起見,角色在我的Rights表(tblRights)中進行控制,該表包含字段名稱,如'RightName'和'RightDescription'。
下面是我執行的代碼的一個示例,它返回一個包含像「操作員」和「經理」角色/右值的字符串數組:
namespace MyProject.Classes
{
public class CustomRoleProvider : RoleProvider
{
private MyEntities db = new MyEntities();
public override string[] GetRolesForUser(string username)
{
tblOperator _tblOperator = (from prod in db.tblOperators
where prod.Username == username
select prod).FirstOrDefault();
var roles = _tblOperator.tblOperatorRights.Where(m => m.WorkCentreID == 1).ToArray();
return roles.Select(m => m.tblRight.RightName).ToArray();
}
}
}
現在假設我手動更新SQL Server和改變角色名稱從「管理員」到「管理員」,下次執行代碼時,它仍會返回「操作員」和「經理」,而不是「操作員」和「管理員」。
任何人都可以看到我要去哪裏錯了嗎?非常感謝您的幫助。
的問候,克里斯
仍設置爲您手動將其更新到值在數據庫中的價值?你確定你的連接字符串指向正確的數據庫嗎? – user65439 2014-10-31 10:19:30
您的數據庫上下文將實體保存在其緩存中的實體已從數據庫中提取它們。每個角色提供者實例只有1個上下文實例。嘗試在每次調用「GetRolesForUer」時實例化一個新的上下文,上下文都是以這種方式使用的。 – 2014-10-31 10:19:34
@ user65439>數據庫中的值仍然是我設置的值。 – 2014-10-31 10:33:55