一个新的ASP.NET MVC 5应用程序如何知道如何创建数据库,以及帐户
我使用Visual Studio 2013 Update 2创建了一个ASP.NET MVC 5应用程序。在应用程序中,我有一个帐户控制器。它不同于我习惯和不是
包含dbcontext的实例化。 public class AccountController : Controller { private ApplicationUserManager _userManager; public AccountController() { } public AccountController(ApplicationUserManager userManager) { UserManager = userManager; } public ApplicationUserManager UserManager { get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } private set { _userManager = value; } } 我默认创建的web.config有一个这样的连接字符串: <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDb)v11.0;AttachDbFilename=|DataDirectory|aspnet-WebApplication3-20140417072624.mdf;Initial Catalog=aspnet-WebApplication3-20140417072624;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> 有人可以解释一下当应用程序第一次启动时,应用程序如何知道为此应用程序创建数据库? 此外,在后续启动时,它是否使用Entity Framework访问身份表以进行身份??验证? 解决方法
1)这里的进展:
当您创建一个新的MVC 5应用程序并选择“个人用户帐户”时,包括一个新的ASP.NET身份提供程序,它使用Entity Framework 6 Code-First。 Microsoft已经采用EF-Code-First来使Identity尽可能定制化。 当Identity第一次访问时,Entity Framework会检查数据库是否存在。除非另有配置,否则它使用“DefaultConnection”来查找身份数据库。如果在调用Identity时数据库不存在,则EF自动创建数据库。 注意你的连接字符串包含 `AttachDbFilename=|DataDirectory|aspnet-WebApplication3-20140417072624.mdf` 如果打开App_Data文件夹,您应该有一个aspnet-WebApplication3-20140417072624.mdf文件。 如果您双击此.mdf文件,VS2013服务器资源管理器将打开您的数据库。如果您已经尝试访问任何Identity功能,您将创建以下表: > _MigrationHistory 默认情况下,您的应用程序配置为使用SQL Server Compact(MDF文件),因此您不必有实际的SQL Server实例运行。所有这一切都是可定制的。您的MDF文件的名称,Identity数据库的模式,SQL Compact的选择与实际的SQL Server实例。更改您的连接字符串,或创建一个新的连接并传递到您的上下文。 2)我的情况是什么? 所有这些都是好的,但是你提出的一个重要问题基本上是“我的上下文在哪里?”,以及关于如何进一步自定义数据库或更改验证逻辑的相关隐含问题。 你会注意到你的项目引用Microsoft.AspNet.Identity.EntityFramework。这个程序集是IdentityDBContext< TUser>和UserManager类的隐含。 打开您的AccountController,并注意构造函数有UserManager对象传递,依次传递一个新的UserStore对象,它传递一个ApplicationDbContext。 public AccountController() : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) ApplicationDbContext在您的模型文件夹中定义。在该文件夹中,您将找到IdentityModels.cs文件。打开它,你会看到 public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection") { } } 这是您的身份上下文分配的地方。您可以更改传递到ApplicationDbContext构造函数的连接名称,或在帐户控制器中定义和使用不同的上下文。 3)我如何自定义我的身份计划? 另一个定义IN IdentityModels.cs文件的类是继承自IdentityUser类的ApplicationUser类。 public class ApplicationUser : IdentityUser { } 您添加到此类的任何属性将保留在您的ASPNetUsers表中。模式的其余部分在IdentityDbContext类中定义。因此,虽然您可以通过将DBSet添加到上下文定义中来向您的身份模式添加更多表(例如权限) public DBSet<Privileges> { get; set; } 改变其他表(角色,声明等)也是可能的,但更多的涉及。例如,要自定义角色表,您必须实现从IdentityRole继承的NewIdentityRole并通过覆盖您的上下文的OnModelCreating()方法来添加它的关系。 这篇文章Customizing Roles Tables做了一个很好的描述所涉及的步骤。即使在这里,你会发现有很大的麻烦投入简单地添加新的列。从IdentityDbContext类中创建的原始模式中删除表或列可能与创建自己的IdentityDbContext类实现一样麻烦。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC项目中放置一个简单的类?
- ‘ASP._Page_sitecore_shell_client_Speak_Layou
- asp.net-mvc – 在ascx文件中使用Html.RenderPar
- asp.net-core – 无法关闭asp.net 5 MVC 6站点中
- asp.net-mvc – User.Identity.Name在ASP.Net MV
- asp.net-mvc – 如何循环使用FormCollection来检
- 在ASP.NET上构建维基百科(学习练习).如何清理不受
- asp.net-mvc – ServiceStack.Factor模块列表中有
- asp.net-mvc – 在vs 2010中运行asp.net mvc 2项
- asp.net – 执行sql脚本而不是等待完成