重命名表时,Owin标识框架不返回任何声明

时间:2018-03-13 23:24:57

标签: asp.net-mvc entity-framework-6 asp.net-web-api2 asp.net-identity claims-based-identity

如果我在Visual Studio(asp.net 4.6.1)中创建一个全新的MVC网站,我可以通过在AccountController类的Register()方法中执行以下操作来添加/检索声明:

if (ModelState.IsValid)
{
    var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
    var result = await UserManager.CreateAsync(user, model.Password);

    var addClaimResult = UserManager.AddClaim(user.Id, new Claim("test", "test"));
    var claims= UserManager.GetClaims(user.Id); 

    //claims.Count == 1
}

如果我通过重写OnModelCreating重命名表,如下所示,则上面的claims.Count为0.换句话说,一旦我重命名表,我就不能再从数据库中获取声明了。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    string prefix = "Identity";
    modelBuilder.Entity<ApplicationUser>().ToTable($"{prefix}Users", "dbo");
    modelBuilder.Entity<IdentityUser>().ToTable($"{prefix}Users", "dbo");
    modelBuilder.Entity<IdentityUserRole>().ToTable($"{prefix}UserRoles", "dbo");
    modelBuilder.Entity<IdentityUserLogin>().ToTable($"{prefix}UserLogins", "dbo");
    modelBuilder.Entity<IdentityUserClaim>().ToTable($"{prefix}UserClaims", "dbo");
    modelBuilder.Entity<IdentityRole>().ToTable($"{prefix}Roles", "dbo");
}

AddClaim方法成功返回,我可以确认&#39;测试&#39;被添加到数据库中的表中。与身份框架相关的所有其他内容仍然有效(登录等),它只是从未返回添加到数据库的声明。我已经尝试过MVC和Web API 2,我已经尝试过不同的时间(即登录后,授权后,经过多次Web方法调用,无论如何)。

我启用了实体框架日志记录。 AddClaim命中数据库。在任何一种情况下,GetClaims都不会命中数据库(表重命名或不重命名)。

为什么claim.Count = 0?

1 个答案:

答案 0 :(得分:0)

ASP Identity 2 + Web API Token Auth - Persistent claims not Loading

与上述答案相同。

modelBuilder.Entity()。ToTable($&#34; {prefix} Users&#34;,&#34; dbo&#34;);不需要。