【发布时间】:2013-12-18 21:03:18
【问题描述】:
我需要将 Asp.Net 最新的 MVC 版本与 现有 数据库集成,该数据库有一个附加列 String Address 到表 dbo.AspNetUsers
我需要创建一个实例ApplicationUser,它具有属性地址。
知道怎么做吗?
【问题讨论】:
标签: c# asp.net-mvc entity-framework identity
我需要将 Asp.Net 最新的 MVC 版本与 现有 数据库集成,该数据库有一个附加列 String Address 到表 dbo.AspNetUsers
我需要创建一个实例ApplicationUser,它具有属性地址。
知道怎么做吗?
【问题讨论】:
标签: c# asp.net-mvc entity-framework identity
一个适合我的可能解决方案,基本上我能够将 Asp.Net 身份用户配置文件与现有数据库集成。
获取 Asp.Identity 表:
或者使用http://identity.codeplex.com/之类的东西
与您现有的数据库集成:
现在您的数据库中有 Asp.Identity 表,应用程序中有 ER 模型。
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
现在,所有新属性都将变成同一个数据库表中的表字段。
希望对大家有所帮助,如果有更好的想法请告诉我。
【讨论】:
我已成功通过 Database First 与 Identity Framework 2.0 集成现有数据库。我在 here 上写了一篇博文,它使用了 ASP.NET MVC 5、Identity Framework 2.0 和 Visual Studio 2013 Update 2 RTM 的 SPA 模板。
我希望这对任何人的旅程有所帮助,因为它包含一些我必须自己弄清楚的地方没有列出的要点。
【讨论】:
看看 GitHub 上的这些项目:
其中包括:
【讨论】:
dbContext 指向我的数据库第一个模型?
我最近遇到了同样的问题。我有一个使用 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 上配置身份服务
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
我希望它有用?
【讨论】:
Scaffold-DbContext / dotnet ef dbcontext scaffold 反对您现有的“AspNetxxx”表。您将生成的模型已经带有 Identity。试试这个练习:使用个人帐户从模板构建代码优先的 .NET 6 MVC 应用程序。进行初始迁移以创建数据库。运行、注册、登录/退出。然后删除解决方案中的迁移文件夹和数据库中的迁移表。该应用程序仍然可以正常工作。 (它仍然是代码优先吗?)看看ApplicationDBContext.cs。现在开始考虑您的自定义设置。
不要忘记添加迁移和更新数据库。否则,它会为身份引发依赖注入异常。
【讨论】:
公共类 MyUser : IdentityUser { 公共虚拟 MyUserInfo MyUserInfo { 获取;放; } }
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 Identity系统中查找用户
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
【讨论】: