我需要将Asp.Net最新的MVC版本与现有的数据库集成,该数据库还有一个列String Address
到表dbo.AspNetUsers
我需要创建一个具有属性Address。
的实例ApplicationUser
知道该怎么做吗?
答案 0 :(得分:56)
一个可行的解决方案,对我来说,基本上我能够将Asp.Net Identity用户配置文件与现有数据库集成。
获取Asp.Identity表:
或者使用类似http://identity.codeplex.com/
的内容与现有数据库集成:
现在,您的应用程序中包含带有ER模型的数据库中的Asp.Identity表。
Asp.Identity Profile添加新属性:
执行命令“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上查看这些项目:
其中包括:
答案 3 :(得分:0)
我最近遇到了同样的问题。我有一个使用 DBFirst 方法创建的应用程序,我需要添加身份。这就是我所做的。
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
public partial class BookStoresDBContext : IdentityDbContext
protected override void OnModelCreating(ModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
}
就它是一个创建的项目而言,StringConnection 已经存在,如果没有添加它。
在 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();
}
您也可以配置身份验证服务
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"))
};
});
然后从包管理器控制台运行迁移
Add-Migration InitDb
在迁移文件上,删除数据库中已有表的所有 migrationBuilder.CreateTable
从包管理器控制台更新数据库
Update-Database
希望对大家有用?
答案 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