【问题标题】:ASP.NET Core Web Application: create model class that has default User model as propertyASP.NET Core Web 应用程序:创建具有默认用户模型作为属性的模型类
【发布时间】:2020-01-31 10:49:01
【问题描述】:

我使用“ASP.NET Core 3.0 Web 应用程序(模型视图控制器)”模板创建了一个新项目。它带有身份验证(注册、登录、注销等)。

我现在想创建一个名为 InsurancePolicy 的模型类,它具有 User 属性(或 UserId 属性),显然在我的 localdb 的默认 AspNetUsers 表中引用了一个用户。

所以 EFCore 是我理解的建模代码优先,所以我创建了 InsurancePolicy 模型类,具有描述等所有属性。我正在关注 Microsoft 的 guideline

但是我在 localdb 中没有 AspNetUsers 表的模型类,以便我在保险单上创建一个属性,例如public AspNetUsers User {get; set;}

我该怎么做?或者有更好的方法吗?

我是 Core 新手,所以代码优先设计而不是 db 优先设计对我来说仍然很模糊。

更新

看起来 AspNetUsers 表的模型是 IdentityUser。这是真的吗,还是我还是迷路了?

【问题讨论】:

  • 是的。默认情况下,它是IdentityUserAspNetUsers 表是 ASP.NET 成员资格日的保留。最初,Identity 模仿了 ASP.NET Membership 中的相同表设置,并且它只是继续遵循这种格式,尽管 Membership 很久以前就被归入了历史的垃圾箱。

标签: c# entity-framework asp.net-core ef-code-first localdb


【解决方案1】:

例如,我将添加模型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 在数据库中创建表和关系。

  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();
    

【讨论】:

猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 2021-08-11
相关资源
最近更新 更多