I have the following structure:
There are several roles (types of users). One of type (named Driver) should have a child table, other - not.
My Application user code:
    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; }
    }
When I create new user with role driver I have to do the following (not real code, just for example in one place):
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);
        }
    }
}
so, I have to separate a request for creating user for 2 requests:
- creating asp.net identity user
- creating Driver record
I think, everybody understands disadvantages - 2 requests instead on one, not in the same transaction...
How to "include" it to ApplicationUser and don't make it mandatory?
 
    