从global.asax中的Session_Start调用Membership.GetUser() - ASP.NET标识

时间:2015-12-31 23:13:08

标签: asp.net asp.net-mvc asp.net-identity

我正在尝试使用ASP.NET identity 2.0从global.asax中的Session_Start调用Membership.GetUser

当调用.Create()时,我在Membership.GetUser上获得以下erorr:

  

发生了'System.Data.SqlClient.SqlException'类型的异常   System.Web.dll但未在用户代码中处理

     

其他信息:找不到存储过程   'dbo.aspnet_CheckSchemaVersion'。

我怀疑这与OWIN尚未初始化有关? 有谁知道是否可以从application_start获取当前的GUID?

这是我的代码......

Global.asax中

    protected void Session_Start(Object sender, EventArgs e)
    {

        SessionData.Create();
    }

SessionData:

 public class SessionData
    {

        public static void Create()
        {
            using (var db = new BeatBoxV2Context())
            {

                var membershipUser = Membership.GetUser();
                var providerUserKey = membershipUser?.ProviderUserKey;

                if (providerUserKey == null) return;
                var guid = (Guid)providerUserKey;

                var account = db.Account.Find(guid);

                var sessionData = new SessionData
                {
                    UserPermissions= db.Permissions.Where(h => h.Guid == guid).ToList()
                };
            }
        }



        public List<Permissions> UserPermissions
        {
            get { return HttpContext.Current.Session["UserPermissions"] != null ? (List<HolterPermission>)HttpContext.Current.Session["UserPermissions"] : null; }
            set { HttpContext.Current.Session["UserPermissions"] = value; }
        }


    }

1 个答案:

答案 0 :(得分:1)

好的所以解决方案如下:

  1. 将数据库附加到SQL Express中的App_Data
  2. 从VS命令提示符
  3. 运行aspnet_regsql