ASP.NET身份和子表

时间:2018-02-21 17:48:11

标签: transactions entity-framework-6 asp.net-identity asp.net-identity-3

我有以下结构:

有几种角色(用户类型)。其中一个类型(名为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.   
  3. 创建驱动程序记录
  4.   

我认为,每个人都理解缺点 - 2个请求代替一个,而不是同一个交易......

如何将“包含”到ApplicationUser并且不强制使用它?

0 个答案:

没有答案