我正在使用VS2017 v15.8.2中的ASP.Net Core 2.1.1 Web应用程序,并将Web应用程序模板与单个用户帐户一起使用。
我想向IdentityUser添加更多属性,因此我创建了一个继承自ApplicationUser
的{{1}}类。我将适当的更新应用于startup.cs和_loginPartial.cshtml。一切都可以编译,但是当我运行IdentityUser
时,它不会拾取我的Add-Migration
类中的属性。我有一个迁移类,但是up和down方法没有属性。
我只有一个项目,因此在Package Manager控制台中选择默认项目不是问题。
这是我的ApplicationUser类
ApplicationUser
这是我的DBContext
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zipcode { get; set; }
public int CompanyId { get; set; }
}
这是Startup.cs中的服务,ConfigureService
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
这是Package Manager控制台中的添加迁移
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.
GetConnectionString("AccountDbConnectionString")));
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
这是迁移的结果
Add-Migration -c ApplicationDbContext V1.00.01
public partial class V10001 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
类位于项目根目录下的Models文件夹中。
当我第一次创建项目并运行update-database命令时,ApplicationUser
被解析为初始的Asp.Net Core Web应用程序模板迁移,它创建了数据库中的所有AspNetUserxxx和AspNetRolexxx表正好。
但是我看不到EF迁移为什么没有看到IdentityUser
类,因此它可以将新属性添加到迁移类中。
当我在网上查找示例时,似乎我在正确地进行所有操作以扩展ApplicationUser
属性。
我想念什么?
编辑1:我在这篇SO帖子中尝试了解决方案,但没有区别。 Entity Framework Core 2.0 add-migration not generating anything
答案 0 :(得分:1)
您需要在DBContext中添加ApplicationUser
类。
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public virtual DbSet<ApplicationUser> ApplicationUser { get; set; }
}
然后添加迁移,然后更新数据库。
答案 1 :(得分:1)
如下更改您的ApplicationDbContext
:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
这是有效的屏幕截图:
[更新] :我只是发现@vivek nuna的答案也有效。您可以根据需要选择。
[更新] :如果遇到类似这样的异常:
An unhandled exception occurred while processing the request.
InvalidOperationException:没有注册类型'Microsoft.AspNetCore.Identity.UserManager`1 [Microsoft.AspNetCore.Identity.IdentityUser]'的服务。 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider提供者,类型serviceType)
不要忘记更新_LoginPartial.cshtml
和SignInManager
引用UserManager
的{{1}},即从以下位置更改代码:
IdentityUser
到
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
答案 2 :(得分:0)
当我使用ASP.NET Core身份软件包时,与登录和身份验证相关的所有页面(如_LoginPartial)必须从以下位置进行更改:
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
收件人:
@using Microsoft.AspNetCore.Identity
inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
更改ApplicatiuonDbContext同样很重要:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{ }
然后必须完成数据库迁移。