带有实体框架的ASP.NET Identity OWIN将以下表添加到数据库中:
ASPNetUsers
ASPNeRoles
ASPNeTokens
ASPNetUserClaims
ASPNetUserLogins
ASPNetUserManagements
ASPNetUserRoles
ASPNetUserSecrets
有人能解释一下这些名字是从哪里来的吗?我搜索了我的解决方案和项目文件,没有发现任何引用。这些名称是可自定义的吗(我的意思是当它们生成时,而不是在它们存在于数据库中之后)?
我尝试了一个实验,并在我的ASP.NET MVC 5解决方案中添加了一个新项目。然后,我使用NuGet安装了Microsoft ASP.NET Identity Owin。然后,我将EntityFramework6添加到该项目中,并创建了一个继承自DbContext的datacontext类。在这一点上,我运行了";启用迁移";命令。这创建了一个Migrations文件夹、一个迁移类以及一个Configuration.cs类。到目前为止,一切都很好。但当我运行";添加迁移首字母"add migration initial";命令,则不会生成上面提到的任何ASP.NET标识表。
然而,当我在MVC项目中遵循相同的步骤时add migration命令确实会生成上面的表。在我的MVC中项目,在我的App_Start文件夹中有一个startup.auth.cs类,然而这似乎是关键,但我只是不确定,因为有些东西是";自动魔术";我显然没有懂startup.auth.cs文件如下所示:
。
using Microsoft.AspNet.Identity;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;
namespace AspNetIdentity
{
public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
}
}
如果我希望能够从MVC项目以外的项目迁移ASP.NET Identity表,我该如何做到这一点?
注意:这些表名看起来来自Identity 1.0的预发布版本,但简单的答案是,它们来自IdentityDbContext.OnModelCreating,它为各种实体指定表名。
您的IdentityDbContext通常被传递到UserStore中。无论您在哪里创建UserManager,都可能同时构建UserStore和IdentityDbContext。请注意,UserStore的默认构造函数创建了一个使用"DefaultConnection"字符串的新IdentityDbContext,因此这可能是您没有看到的神奇步骤。
IdentityDbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)