ASP.NET身份表生成和项目解耦

时间:2014-02-14 06:53:23

标签: entity-framework migration asp.net-mvc-5 asp.net-identity

ASP.NET Identity OWIN with Entity Framework将以下表添加到数据库中:

ASPNetUsers
ASPNeRoles
ASPNeTokens
ASPNetUserClaims
ASPNetUserLogins
ASPNetUserManagements
ASPNetUserRoles
ASPNetUserSecrets
  1. 有人可以向我解释这些名字的来源吗?我搜索了我的解决方案和项目文件,看不到它们的参考。这些名称是否可自定义(我的意思是在它们生成时 - 而不是在它们存在于数据库中之后)?

  2. 我尝试了一个实验,并在我的ASP.NET MVC 5解决方案中添加了一个新项目。然后我使用NuGet来安装Microsoft ASP.NET Identity Owin。然后,我将Entity Framework 6添加到该项目,并创建了一个继承自DbContext的datacontext类。此时,我从程序包管理器控制台运行了“enable-migrations”命令。这创建了一个Migrations文件夹和一个迁移类以及一个Configuration.cs类。到现在为止还挺好。但是当我运行“add-migration initial”命令时,没有生成上面提到的ASP.NET身份表。

    然而,当我在我的MVC项目中遵循相同的步骤时, add-migration命令确实生成了上面的表。在我的MVC中 项目,我的App_Start文件夹中有一个startup.auth.cs类, 然而。这似乎是关键,但我只是不确定因为 有些东西是“自我魔法地”发生的,我显然不会 了解。 startup.auth.cs文件如下所示:

  3. 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表,我该怎么办?

1 个答案:

答案 0 :(得分:0)

注意:这些表名称看起来来自Identity 1.0的预发布版本,但简短的回答是,它们来自IdentityDbContext.OnModelCreating,它指定了各种实体的表名。

您的IdentityDbContext通常会传递到UserStore。无论您在何处创建UserManager,都可能在构建UserStore和IdentityDbContext的位置。请注意,UserStore的默认构造函数创建一个新的IdentityDbContext,它使用“DefaultConnection”字符串,这可能是您没有看到的神奇步骤。

IdentityDbContext

    protected override void OnModelCreating(DbModelBuilder modelBuilder)