使用Asp.Net Identity DataBase的第一种方法

时间:2013-12-18 21:03:18

标签: c# asp.net-mvc entity-framework identity

我需要将Asp.Net最新的MVC版本与现有的数据库集成,该数据库还有一个列String Address到表dbo.AspNetUsers

我需要创建一个具有属性Address。

的实例ApplicationUser

知道该怎么做吗?

5 个答案:

答案 0 :(得分:56)

一个可行的解决方案,对我来说,基本上我能够将Asp.Net Identity用户配置文件与现有数据库集成。

获取Asp.Identity表:

  • 使用身份验证个人帐户创建MVC项目
  • 打开Web.config中DefaultConnection下列出的数据库。它将被调用(aspnet- [timestamp]或类似的东西。)
  • 使用SQL Server Management Studio编写数据库表脚本(为mdc附加数据库)。

或者使用类似http://identity.codeplex.com/

的内容

与现有数据库集成:

  • 将脚本表插入SQL Server Management Studio中的现有数据库。
  • 自定义并添加与ApplicationUser的关系(如有必要)。
  • 创建新的Web项目> MVC> DB First Project>使用EF ...
  • 导入数据库
  • 在IdentityModels.cs中,更改ApplicationDbContext:base(“DefaltConnection”)以使用项目的DbContext。

现在,您的应用程序中包含带有ER模型的数据库中的Asp.Identity表。

Asp.Identity Profile添加新属性:

  • 启用实体框架代码优先数据库迁移,只需在VS中进入工具包管理器控制台',
  • 执行命令“Enable-Migrations”;启用数据库迁移后,我们可以继续为UserProfile添加新属性

  • 要添加新属性,请修改IdentityModels.cs文件,例如:


public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailID { get; set; }
}

添加新迁移

  • 添加属性后,启动程序包管理器控制台并执行以下命令。

    添加迁移“YouMigrationName”

此命令将生成数据库脚本文件,现在执行以下命令以针对数据库运行此脚本文件。

Update-Database

现在,所有新属性都将转换为同一数据库表中的表字段。

我希望它可以帮助别人,如果你有更好的主意,请告诉我。

答案 1 :(得分:22)

我已成功通过Database First与Identity Framework 2.0集成现有数据库。我在其上写了一篇博客文章here,它使用了ASP.NET MVC 5,Identity Framework 2.0和Visual Studio 2013 Update 2 RTM中的SPA模板。

我希望这可以帮助任何人在他们的旅程中,因为它包含一些我没有在我自己想出的地方没有列出的点。

答案 2 :(得分:20)

在GitHub上查看这些项目:

其中包括:

  • ASP.NET Identity 2.0的SQL数据库项目模板
  • 实体框架数据库 - 第一个提供商
  • 源代码和示例

enter image description here

答案 3 :(得分:0)

我最近遇到了同样的问题。我有一个使用 DBFirst 方法创建的应用程序,我需要添加身份。这就是我所做的。

  1. 安装下一个软件包:
<块引用>
   1. Microsoft.EntityFrameworkCore
   2. Microsoft.EntityFrameworkCore.Design
   3. Microsoft.EntityFrameworkCore.SqlServer
   4. Microsoft.AspNetCore.Identity
   5. Microsoft.AspNetCore.Identity.EntityFrameworkCore
   6. Microsoft.AspNetCore.Aututhentication.JwtBearer
  1. DbContext 是否继承自 IdentityDbContext,像这样:
public partial class BookStoresDBContext : IdentityDbContext
  1. OnModelCreating 我调用了基构造函数以避免出现“'IdentityUserLogin' 需要定义一个主键”之类的错误
 protected override void OnModelCreating(ModelBuilder modelBuilder) {
     base.OnModelCreating(modelBuilder);
 }
  1. 就它是一个创建的项目而言,StringConnection 已经存在,如果没有添加它。

  2. 在 Startup.cs 上,在 ConfigureServices 上配置 Identity 服务


public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BookStoresDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BookStoreDB")));

    services.AddIdentity<IdentityUser, IdentityRole>(options =>
    {
        options.Password.RequireDigit = true;
        options.Password.RequiredLength = 5;
    
    }).AddEntityFrameworkStores<BookStoresDBContext>()
    .AddDefaultTokenProviders();

}

  1. 您也可以配置身份验证服务

    services.AddAuthentication(auth =>
    {
        auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        auth.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    }).AddJwtBearer(options => {
        options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            RequireExpirationTime = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Your key to encrypt"))
        };
    });
    
  2. 然后从包管理器控制台运行迁移

Add-Migration InitDb
  1. 在迁移文件上,删除数据库中已有表的所有 migrationBuilder.CreateTable

  2. 从包管理器控制台更新数据库

Update-Database
  1. 然后你会在你的数据库上看到身份表

enter image description here

希望对大家有用?

答案 4 :(得分:-2)

public class MyUser:IdentityUser     {         public virtual MyUserInfo MyUserInfo {get;组; }     }

public class MyUserInfo{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 
public class MyDbContext : IdentityDbContext<MyUserInfo> //Edited to MyUserInfo
{ 
    public MyDbContext() 
        : base("DefaultConnection") 
    { 
    } 
    public System.Data.Entity.DbSet<MyUserInfo> MyUserInfo { get; set; } 
 } 

获取个人资料信息

当用户登录时,您可以通过执行以下操作显示配置文件信息 获取当前登录的UserId,以便您可以在ASP.NET身份系统中查看用户

var currentUserId = User.Identity.GetUserId(); 

在ASP.Identity系统中实例化UserManager,以便您可以在系统中查找用户

var manager = new UserManager<MyUser>(new UserStore<MyUser>(new MyDbContext())); 

获取用户对象

var currentUser = manager.FindById(User.Identity.GetUserId()); 

获取有关用户的个人资料信息

currentUser.MyUserInfo.FirstName