ASP.NET 核心 Web 应用程序:创建默认用户模型为 属性 的模型 class
ASP.NET Core Web Application: create model class that has default User model as property
我已经使用 "ASP.NET Core 3.0 Web Application (Model View Controller)" 的模板创建了一个新项目。它带有身份验证(注册、登录、注销等)。
我现在想创建一个名为 InsurancePolicy 的模型 class,它具有用户 属性(或 UserId 属性),显然在默认 AspNetUsers [=37= 中引用用户] 在我的本地数据库中。
据我所知,EFCore 是用于建模的代码优先,因此我创建了 InsurancePolicy 模型 class,其中包含 Description 等所有属性。我正在关注 Microsoft guideline。
但是我在 localdb 中没有 AspNetUsers table 的模型 class,我无法为保险单创建 属性,例如public AspNetUsers User {get; set;}
我该怎么做?或者有更好的方法吗?
我是 Core 的新手,所以代码优先设计与数据库优先设计对我来说仍然很模糊。
更新
看起来 AspNetUsers table 的模型是 IdentityUser。这是真的吗,还是我还是迷路了?
例如,我将添加模型 Book
并向身份用户添加外键,一本书属于一个用户 :
创建 Book.cs
:
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public string UserId { get; set; }
public IdentityUser User { get; set; }
}
修改 ApplicationDbContext
以包含 DbSet:
public class ApplicationDbContext : IdentityDbContext
{
public DbSet<Book> Books { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
add-migration Name
和 update-database
在数据库中创建 table 和关系。
如果你想在控制器中添加属于当前用户的一本书,你可以先注入服务:
private readonly ILogger<HomeController> _logger;
private readonly ApplicationDbContext _context;
private readonly UserManager<IdentityUser> _userManager;
public HomeController(ILogger<HomeController> logger, ApplicationDbContext context, UserManager<IdentityUser> userManager)
{
_logger = logger;
_context = context;
_userManager = userManager;
}
创建图书并保存到数据库:
Book book = new Book();
//or search user by FindByIdAsync or FindByEmailAsync
var user = await _userManager.GetUserAsync(HttpContext.User);
book.User = user;
_context.Books.Add(book);
await _context.SaveChangesAsync();
如果你想看有用户属性的书,你可以试试:
using Microsoft.EntityFrameworkCore;
var result= _context.Books.Include(rt => rt.User).Where(x => x.Id == 1).FirstOrDefault();
我已经使用 "ASP.NET Core 3.0 Web Application (Model View Controller)" 的模板创建了一个新项目。它带有身份验证(注册、登录、注销等)。
我现在想创建一个名为 InsurancePolicy 的模型 class,它具有用户 属性(或 UserId 属性),显然在默认 AspNetUsers [=37= 中引用用户] 在我的本地数据库中。
据我所知,EFCore 是用于建模的代码优先,因此我创建了 InsurancePolicy 模型 class,其中包含 Description 等所有属性。我正在关注 Microsoft guideline。
但是我在 localdb 中没有 AspNetUsers table 的模型 class,我无法为保险单创建 属性,例如public AspNetUsers User {get; set;}
我该怎么做?或者有更好的方法吗?
我是 Core 的新手,所以代码优先设计与数据库优先设计对我来说仍然很模糊。
更新
看起来 AspNetUsers table 的模型是 IdentityUser。这是真的吗,还是我还是迷路了?
例如,我将添加模型 Book
并向身份用户添加外键,一本书属于一个用户 :
创建
Book.cs
:public class Book { public int Id { get; set; } public string Name { get; set; } public string UserId { get; set; } public IdentityUser User { get; set; } }
修改
ApplicationDbContext
以包含 DbSet:public class ApplicationDbContext : IdentityDbContext { public DbSet<Book> Books { get; set; } public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } }
add-migration Name
和update-database
在数据库中创建 table 和关系。如果你想在控制器中添加属于当前用户的一本书,你可以先注入服务:
private readonly ILogger<HomeController> _logger; private readonly ApplicationDbContext _context; private readonly UserManager<IdentityUser> _userManager; public HomeController(ILogger<HomeController> logger, ApplicationDbContext context, UserManager<IdentityUser> userManager) { _logger = logger; _context = context; _userManager = userManager; }
创建图书并保存到数据库:
Book book = new Book(); //or search user by FindByIdAsync or FindByEmailAsync var user = await _userManager.GetUserAsync(HttpContext.User); book.User = user; _context.Books.Add(book); await _context.SaveChangesAsync();
如果你想看有用户属性的书,你可以试试:
using Microsoft.EntityFrameworkCore; var result= _context.Books.Include(rt => rt.User).Where(x => x.Id == 1).FirstOrDefault();