Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net-MVC5身份验证_C#_Asp.net_Sql_Asp.net Mvc_Database - Fatal编程技术网

C# ASP.Net-MVC5身份验证

C# ASP.Net-MVC5身份验证,c#,asp.net,sql,asp.net-mvc,database,C#,Asp.net,Sql,Asp.net Mvc,Database,我有几个基本问题,关于在给定的模板中如何进行身份验证。当我在VisualStudio2013中创建一个新的MVC5项目时,我看到有几种不同类型的项目,其中一种是MVC,其中包括单个用户帐户。我创建了它,VisualStudio为项目创建了所有的脚手架。我可以登录和注册等。我的问题如下: 代码如何知道要使用哪些表:例如,自动创建的表是: 但在模型帐户视图模型中: 我发现没有一个类使用任何表名: namespace HelloLogin.Models { public class Exter

我有几个基本问题,关于在给定的模板中如何进行身份验证。当我在VisualStudio2013中创建一个新的MVC5项目时,我看到有几种不同类型的项目,其中一种是MVC,其中包括单个用户帐户。我创建了它,VisualStudio为项目创建了所有的脚手架。我可以登录和注册等。我的问题如下:

代码如何知道要使用哪些表:例如,自动创建的表是:

但在模型帐户视图模型中: 我发现没有一个类使用任何表名:

namespace HelloLogin.Models
{
    public class ExternalLoginConfirmationViewModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }
    }

    public class ManageUserViewModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Current password")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "New password")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm new password")]
        [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public class LoginViewModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public class RegisterViewModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }
}
我没有看到两者之间的联系,也没有看到使用此模型如何从数据库中获取信息

如果有人能给我一个简单的例子(或一个教程链接),我将如何连接这两者。假设我有一个名为:Hellogin的数据库,没有表,我如何为它创建模型、控制器和表?我只是看不到模型和数据库之间的联系,也看不到表是如何结构的(或者它如何知道在从表中获取数据时使用什么名称)


谢谢

连接分为两部分。第一个是
IdentityDbContext
,为您构建的上下文从中继承。它具有以下属性:

public virtual IDbSet<IdentityRole> Roles { get; set; }
public virtual IDbSet<TUser> Users { get; set; }

因此,在这两者之间,您可以得到
IdentityUser
IdentityRole
IdentityUserClaim
IdentityUserLogin
IdentityUserRole
的表格。这是你的五张桌子。但是,您可能会问,这些不是表名。为什么呢?这就是微软,只是毫无理由地自定义生成的表名。原因很可能是因为旧版本的ASP.NET身份验证方案具有这种样式的表名,所以它们继续使用这种方式。我想这是不是一个“好”的理由还有争议。

你看过控制器代码了吗?您是否在示例中使用EntityFramework?这些只是在视图和控制器之间传递数据的视图模型。它们是表中数据的子集。啊,我知道信息来自哪里了。对一个新来的人来说相当混乱。我想从SQL查询中提取数据,并将其放入模型中,然后在视图中使用它。我不知道这是一种更好的方法,还是使用实体框架更好。你怎么认为?我想我总是可以改变它的。总是使用ORM(实体框架),除非使用存储过程更有意义。即使这样,您也会将存储过程集成到您的上下文中。因此,如果我想说在我的注册中添加另一个字段,例如出生日期,您能举个例子说明我将如何做到这一点吗?
public virtual ICollection<IdentityUserClaim> Claims { get; }
public virtual ICollection<IdentityUserLogin> Logins { get; }
public virtual ICollection<IdentityUserRole> Roles { get; }