Asp.net mvc 5 ASP.NET标识-什么方法创建表?

Asp.net mvc 5 ASP.NET标识-什么方法创建表?,asp.net-mvc-5,asp.net-identity,asp.net-authentication,Asp.net Mvc 5,Asp.net Identity,Asp.net Authentication,当您在VS2013中使用单个用户帐户创建新的MVC5项目时,帐户表(dbo.AspNet*)将在您首次尝试登录或注册新帐户时自动在DefaultConnection定义的数据库中创建。有人知道创建这些表的项目中的确切类/方法吗 使用VS2012/MVC4中的SimpleMembership,使用以下方法创建表: WebSecurity.InitializeDatabaseConnection(“DefaultConnection”、“UserProfile”、“UserId”、“UserName

当您在VS2013中使用单个用户帐户创建新的MVC5项目时,帐户表(dbo.AspNet*)将在您首次尝试登录或注册新帐户时自动在DefaultConnection定义的数据库中创建。有人知道创建这些表的项目中的确切类/方法吗

使用VS2012/MVC4中的SimpleMembership,使用以下方法创建表:

WebSecurity.InitializeDatabaseConnection(“DefaultConnection”、“UserProfile”、“UserId”、“UserName”,autoCreateTables:true)

在InitializeSimpleMembershipAttribute.cs筛选器的SimpleMembershipInitializer类中调用

我还没有在VS2013/MVC5项目中找到类似的方法


有什么线索吗?

请查看由IdentityDbContext(Microsoft.AspNet.Identity.EntityFramework)继承的DbContext(System.Data.Entity),它是由默认Visual Studio 2013 ASP.NET Web应用程序/MVC模板中的IdentityModels.cs中的ApplicationDbContext继承的

AccountController为您提供了一条关于如何在初始化过程中发挥上述作用的线索:

public AccountController()
        : this(new UserManager<ApplicationUser>(
              new UserStore<ApplicationUser>(new ApplicationDbContext()))) {}
publiccountcontroller()
:此(新用户管理器)(
新的用户存储(新的ApplicationDbContext()){}
(如果您希望进行自定义,Kevin的评论是对的。例如,可以通过ApplicationUser轻松地将属性添加到用户,并且可以像往常一样通过您自己的任何实现来实现更多控制。旧的身份和身份验证体系结构已完全被OWIN/Katana所取代。)

编辑:事实上,我可能有点误读了你的问题。如果需要,实际创建数据库的代码可能驻留在CreateDatabaseIfNotExists类(System.data.Entity)中。我不确定从哪个上下文调用哪个具体实现,但显然创建DB是实体框架的责任

尽管如此,使用dotPeek、ILSpy、ReSharper或类似工具,如果您开始探索我最初提到的类,您应该能够找到您想要的内容。(关于这不是改变行为的地方的建议仍然存在。)


希望这能有所帮助。

默认情况下,MVC5模板依赖EntityFramework CodeFirst的默认数据库初始值设定项在第一次需要时创建数据库


ASP.NET Identity中没有类似的方法。还有其他方法可以自定义ASP.NET标识。您寻找此方法是因为要自定义ASP.NET标识的工作方式吗?如果你问如何执行这种类型的定制,你可能会得到更多有用的答案。在这一点上,我只是在寻找创建标识表的方法,因为我想了解每一点是如何工作的。郝,你能进一步解释吗?我仍然感到困惑,因为我在项目中的任何地方都找不到CreateDatabaseIfNotExists方法调用。项目中没有方法调用,这是EntityFramework在需要时第一次完成查询时自动完成的。如果您想要自定义它,您需要插入您自己的初始值设定项,或者您可以在DbContextOskar中钩住/覆盖OnModelCreating方法,正如我在上面对Hao所说的,我在项目中的任何地方都没有找到CreateDatabaseIfNotExists方法调用,所以我仍然不知道什么方法调用正在创建数据库和表。我在单步执行代码时使用了SQL Profiler,看到它都是在调用UserManager.CreateAsync之后创建的,但这是为了创建一个新用户。深入研究与UserManager相关的各种类型和类并没有发现对CreateDatabaseIfNotExists的调用。