Хорошее решение с ASP.NET Identity и дочерними таблицами

У меня есть следующая структура:

Есть несколько ролей (типы пользователей). Один из типов (с именем Driver) должен иметь дочернюю таблицу, другой - нет.

Код моего приложения:

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // bla-bla-bla
        return userIdentity;
    }

    public int? CompanyId { get; set; }
    public string SMSnumber { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Когда я создаю нового пользователя с ролевым драйвером, я должен сделать следующее (не настоящий код, например, в одном месте):

                var user = new ApplicationUser { UserName = model.AspNetUserName, CompanyId = companyId, FirstName = model.FirstName, LastName = model.LastName };
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    var roleResult = await UserManager.AddToRoleAsync(user.Id, RoleStaticStrings.ROLE_DRIVER);
                    if (roleResult.Succeeded)
                    {
                        var driver = mapper.Map<DriverPersonalInfoVM, Driver>(model, new Driver
                        {
                            CompanyId = companyId,
                            UserId = user.Id,
                            RecordDate = DateTime.UtcNow,
                            Active = true
                        });

                        db.Drivers.Add(driver);
                        try
                        {
                            db.SaveChanges();
                        }
                        catch (Exception ex)
                        {
                            await UserManager.DeleteAsync(user);
                        }

Итак, я должен разделить запрос на создание пользователя для 2 запросов:

  1. создание asp.net личность пользователя
  2. создание записи драйвера

Я думаю, что все понимают недостатки - 2 запроса вместо одного, а не в одной транзакции...

Как "включить" его в ApplicationUser и не сделать его обязательным?

0 ответов

Другие вопросы по тегам