一个新的ASP.NET MVC 5应用程序如何知道如何创建数据库,以及帐户控制器如何访问数据库?
|
我使用Visual Studio 2013 Update 2创建了一个ASP.NET MVC 5应用程序。在应用程序中,我有一个帐户控制器。它不同于我习惯和不是
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类实现一样麻烦。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 点击图片,AJAX删除后台图片文件的实现代码(asp.net)
- asp.net-mvc – 如何为所有控制器编写动作过滤器
- asp.net-mvc-3 – MVC 3 – 比较属性 – 在客户端执行不区分
- asp.net-mvc-3 – 不明显的客户端验证规则中的验证类型名称
- asp.net – 在web-farm网站上将machineKey添加到web.config
- asp.net – 什么原因导致“无法注销UpdatePanel”错误?
- ASP.NET – meta:ResourceKey vs %$Resources:MyKey%
- asp.net – 将HTML5占位符文本添加到文本框.net
- 验证 – 想知道为什么DisplayName属性在被覆盖属性的LabelF
- 在ASP.NET菜单控件中设置item.selected
- asp.net – 使用AJAX进行WCF调用
- asp.net-mvc – 适用于asp.net MVC和razor视图的
- asp.net – 处理“潜在的危险Request.Form值…”
- asp.net-mvc – 使用自己的HtmlHelper扩展名用于
- asp.net-mvc-3 – ASP.NET MVC – 如何防止双击提
- asp.net-mvc-3 – 可以重定向到新页面的Ajax.Beg
- asp.net – 如何在gridview中将navigateurl添加到
- asp.net – 如何在StackedBar中值为零时隐藏数据
- asp.net – 仅用于字母和数字的正则表达式验证器
- asp.net – 为什么IFormFile显示为null,我该如何
