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 并向身份用户添加外键,一本书属于一个用户 :

  1. 创建 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; }
    }
    
  2. 修改 ApplicationDbContext 以包含 DbSet:

    public class ApplicationDbContext : IdentityDbContext
    {
        public DbSet<Book> Books { get; set; }
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }
    
  3. add-migration Nameupdate-database 在数据库中创建 table 和关系。

  4. 如果你想在控制器中添加属于当前用户的一本书,你可以先注入服务:

    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;
    }
    
  5. 创建图书并保存到数据库:

    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();
    
  6. 如果你想看有用户属性的书,你可以试试:

    using Microsoft.EntityFrameworkCore;
    
    var result= _context.Books.Include(rt => rt.User).Where(x => x.Id == 1).FirstOrDefault();