ASP.NET Core, использующий UserManager или Entity Framework для проверки расширенного поля формы - PullRequest
0 голосов
/ 28 сентября 2018

Я следовал процедуре создания библиотеки классов Razor в соответствии с: Идентификацией платформы в проектах ASP.NET Core

Я также расширил свою модель, добавив свойство под названиемOffice365DomainName:

    [Required]
    [Display(Name = "Office 365 Domain Name")]
    public string Office365DomainName { get; set; }

Это свойство было включено во все нужные места, чтобы обеспечить заполнение базы данных SQL согласно документации .

Теперь, когдановый пользователь пытается зарегистрироваться, я хотел бы проверить базу данных, чтобы убедиться, что значение Office365DomainName еще не существует.

Вот что я пробовал:

  1. Внедрение ApplicationDbContext в мой файл Register.cshtml.cs и выполнение var tenantResult = await _context.Tenant.FindAsync(Input.Office365DomainName);, однако это дает мне исключение, касающееся наличия первичного ключа для запроса.Это имеет смысл ... но я не знаю, каким будет ПК, не посмотрев сначала на данные (улов 22).
  2. Затем я попробовал методы UserManger, такие как var foo = await _userManager.GetUserAsync(User);.Однако, поскольку ни один пользователь не вошел в систему, User не существует.

Я не могу найти встроенный метод из UserManager, который бы соответствовал моим потребностям.Так как же человек сможет запросить сущность, не зная первичного ключа?Я полагаю, что метод CreateAsync из UserManager выполняет эту проверку, чтобы убедиться, что другие пользователи не существуют;Я просто хочу добавить эту функциональность и проверить наличие добавленного поля.

Вот моя информация для startup.cs:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("DefaultConnection")));

Вот мой ApplicationDbContext.cs:

    public class ApplicationDbContext : IdentityDbContext<UserRegistrationExtension>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }

Моя модель, представляющая данные из формы, UserRegistrationExtension.Моя предыдущая попытка была создать Tenant объект внутри ApplicationDbContext.cs типа UserRegistrationExtension.Полное предположение, но я чувствую, что я не на правильном пути.

В основном я предполагаю, что мне нужно указать где-нибудь мой тип UserRegistrationExtension, но я не знаю, где его включить ??

1 Ответ

0 голосов
/ 28 сентября 2018

Ваша первая проблема связана с использованием FindAsync.Этот метод специально запрашивает через первичный ключ, поэтому, когда вы передаете значение Office365DomainName, он пытается найти запись с этим в качестве первичного ключа, чего, очевидно, нет.Вместо этого вы должны делать что-то вроде:

await _context.Tenants.SingleOrDefaultAsync(x => x.Office365DomainName == Input.Office365DomainName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...