4

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

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

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

在 InitializeSimpleMembershipAttribute.cs 过滤器的 SimpleMembershipInitializer 类中调用。

我一直无法在 VS2013 / MVC5 项目中找到类似的方法。

有什么线索吗?

4

2 回答 2

1

默认情况下,MVC5 模板依赖 EntityFramework CodeFirst 的默认数据库初始化程序在第一次需要时创建数据库。

请参见 CreateDatabaseIfNotExists

于 2013-12-13T20:50:20.023 回答
0

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

AccountController 为您提供了有关上述内容如何在其初始化方式中发挥作用的线索:

public AccountController()
        : this(new UserManager<ApplicationUser>(
              new UserStore<ApplicationUser>(new ApplicationDbContext()))) {}

(如果您希望自定义,Kevin 在他的评论中是正确的。例如,可以通过 ApplicationUser 轻松地将属性添加到 User,并且可以通过您自己的任何实现像往常一样实现更多控制。旧的身份和认证架构已被 OWIN/Katana 完全取代。)

编辑:实际上,我可能稍微误读了您的问题。如果需要,实际创建数据库的代码可能位于 CreateDatabaseIfNotExists 类 (System.Data.Entity) 之类的东西中。我不确定从哪个上下文调用哪个确切的实现,但显然创建数据库是实体框架的责任。

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

希望这可以帮助。

于 2013-12-13T14:32:34.670 回答