Базовое веб-приложение ASP.NET: создайте класс модели с моделью пользователя по умолчанию в качестве свойства - PullRequest
0 голосов
/ 02 октября 2019

Я создал новый проект с использованием шаблона для «Веб-приложение ASP.NET Core 3.0 (Model View Controller)». Он поставляется с аутентификацией (регистрация, вход в систему, выход из системы и т. Д.).

Теперь я хочу создать класс модели с именем InsurancePolicy, который имеет свойство User (или свойство UserId), очевидно, ссылаясь на пользователя в таблице AspNetUsers по умолчанию. в моей локальной базе данных.

Итак, EFCore является первым кодом для моделирования, который я понимаю, поэтому я создал этот класс модели InsurancePolicy со всеми свойствами, такими как Description и т. д. Я следую этому руководству Microsoft.

Однако у меня нет класса модели для таблицы AspNetUsers в localdb, чтобы я мог создать свойство в страховом полисе, например, public AspNetUsers User {get; set;}

Как мне это сделать? Или есть лучший способ сделать это?

Я новичок в Core, поэтому дизайн кода сначала, а не базы данных сначала все еще размыт для меня.

ОБНОВЛЕНИЕ

Похоже, модель для таблицы AspNetUsers - IdentityUser. Это правда или я все еще потерялся?

1 Ответ

1 голос
/ 02 октября 2019

Например, я добавлю модель Book и добавлю внешний ключ для пользователя Identity, книга принадлежит одному пользователю:

  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 Name и update-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();
    
...