Хорошее решение с 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 запросов:
- создание asp.net личность пользователя
- создание записи драйвера
Я думаю, что все понимают недостатки - 2 запроса вместо одного, а не в одной транзакции...
Как "включить" его в ApplicationUser и не сделать его обязательным?