我怎样才能 return 我的实体,在它被插入到数据库之后?
How can I return my entity, after it has been inserted into the database?
我为解决方案用户使用模型class,并使用身份来控制登录等
因此,要创建身份用户,我需要先创建应用程序用户。
我怎样才能return这个实体?或者,如何 return 创建 Id?
低于我的class结构
授权控制器
public class AuthControllerController : MainController
{
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;
private readonly AppSettings _appSettings;
private readonly IUserSolutionService _userSolutionService;
private readonly IUserSolutionRepository _userSolutionRepo;
private readonly IMapper _mapper;
public AuthControllerController(IUserIdentity userIdentity,
SignInManager<IdentityUser> signInManager,
UserManager<IdentityUser> userManager,
IOptions<AppSettings> appSettings,
IUserSolutionService userSolutionService,
IUserSolutionRepository userSolutionRepo,
IMapper mapper) : base(userIdentity)
{
_signInManager = signInManager;
_userManager = userManager;
_appSettings = appSettings.Value;
_userSolutionService = userSolutionService;
_userSolutionRepo = userSolutionRepo;
_mapper = mapper;
}
[HttpPost("register")]
public async Task<ActionResult> Registrar(UserSolutionViewModel registerUser)
{
if (!ModelState.IsValid) return BadRequest("Há itens faltando");
var returnOfRegisterUser = someMethodToReturnId(); //How to do this?
var user = new IdentityUser()
{
Id = registerUser.Id.ToString(), //return the Id of User of App
UserName = registerUser.Email, //não precisa ser o email, mas, por padrao deixaremos ser o email
Email = registerUser.Email,
EmailConfirmed = true //pode ser false e ter a confirmação de email em algum lugar.
};
var result = await _userManager.CreateAsync(user, registerUser.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, false); //FALSE neste parametro é se quer persistir esse login
//return CustomResponse(GerarJwtClaimsAndUser(user.Email)); // este metodo retorna mais dados do usuário e não somente o Token
//return CustomResponse(GerarJwt());//caso seja necessário gerar o token com as claims, usar o outro método - linha abaixo -
return Ok(GerarJwt());
}
return Ok(registerUser);
}
}
接口:
public interface IUserSolutionRepository : IRepository<UserSolution>
{
Task<UserSolution> GetUserByEmail(string email);
Task<UserSolution> GetUserByPhone(string countryCode, string areaCode, string phone);
Task<UserSolution> GetUser(Guid id);
Task<UserSolution> GetUserAddress(Guid id);
Task<UserSolution> AddUserSolution(UserSolution user);
}
回购:
public class UserSolutionRepository : Repository<UserSolution>, IUserSolutionRepository
{
public UserSolutionRepository(SolutionDbContext context) : base(context)
{
}
......
public async Task<UserSolution> AddUserSolution(UserSolution user)
{
//Can I return here????
}
}
}
一旦在数据库中添加了用户,我相信,只需要在数据库中生成的 Id 即可插入到 Identity 中。
感谢您的帮助。
如果您使用的是生成的数据库 Ids
(如 IDENTITY
),Id
将在 SaveChangesAsync()
之后自动为您填充:
public async Task<IActionResult> Create(User user)
{
int id = user.Id; // id is 0
_context.Add(user);
await _context.SaveChangesAsync();
id = user.Id; // Yes, it has value
return View(user);
}
当使用自动生成的 Ids
时,Entity framework 默认跟随每个 INSERT
和 SELECT SCOPE_IDENTITY()
。
Screenshots of test
插入用户前
插入用户后
我为解决方案用户使用模型class,并使用身份来控制登录等
因此,要创建身份用户,我需要先创建应用程序用户。 我怎样才能return这个实体?或者,如何 return 创建 Id?
低于我的class结构
授权控制器
public class AuthControllerController : MainController
{
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;
private readonly AppSettings _appSettings;
private readonly IUserSolutionService _userSolutionService;
private readonly IUserSolutionRepository _userSolutionRepo;
private readonly IMapper _mapper;
public AuthControllerController(IUserIdentity userIdentity,
SignInManager<IdentityUser> signInManager,
UserManager<IdentityUser> userManager,
IOptions<AppSettings> appSettings,
IUserSolutionService userSolutionService,
IUserSolutionRepository userSolutionRepo,
IMapper mapper) : base(userIdentity)
{
_signInManager = signInManager;
_userManager = userManager;
_appSettings = appSettings.Value;
_userSolutionService = userSolutionService;
_userSolutionRepo = userSolutionRepo;
_mapper = mapper;
}
[HttpPost("register")]
public async Task<ActionResult> Registrar(UserSolutionViewModel registerUser)
{
if (!ModelState.IsValid) return BadRequest("Há itens faltando");
var returnOfRegisterUser = someMethodToReturnId(); //How to do this?
var user = new IdentityUser()
{
Id = registerUser.Id.ToString(), //return the Id of User of App
UserName = registerUser.Email, //não precisa ser o email, mas, por padrao deixaremos ser o email
Email = registerUser.Email,
EmailConfirmed = true //pode ser false e ter a confirmação de email em algum lugar.
};
var result = await _userManager.CreateAsync(user, registerUser.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, false); //FALSE neste parametro é se quer persistir esse login
//return CustomResponse(GerarJwtClaimsAndUser(user.Email)); // este metodo retorna mais dados do usuário e não somente o Token
//return CustomResponse(GerarJwt());//caso seja necessário gerar o token com as claims, usar o outro método - linha abaixo -
return Ok(GerarJwt());
}
return Ok(registerUser);
}
}
接口:
public interface IUserSolutionRepository : IRepository<UserSolution>
{
Task<UserSolution> GetUserByEmail(string email);
Task<UserSolution> GetUserByPhone(string countryCode, string areaCode, string phone);
Task<UserSolution> GetUser(Guid id);
Task<UserSolution> GetUserAddress(Guid id);
Task<UserSolution> AddUserSolution(UserSolution user);
}
回购:
public class UserSolutionRepository : Repository<UserSolution>, IUserSolutionRepository
{
public UserSolutionRepository(SolutionDbContext context) : base(context)
{
}
......
public async Task<UserSolution> AddUserSolution(UserSolution user)
{
//Can I return here????
}
}
}
一旦在数据库中添加了用户,我相信,只需要在数据库中生成的 Id 即可插入到 Identity 中。 感谢您的帮助。
如果您使用的是生成的数据库 Ids
(如 IDENTITY
),Id
将在 SaveChangesAsync()
之后自动为您填充:
public async Task<IActionResult> Create(User user)
{
int id = user.Id; // id is 0
_context.Add(user);
await _context.SaveChangesAsync();
id = user.Id; // Yes, it has value
return View(user);
}
当使用自动生成的 Ids
时,Entity framework 默认跟随每个 INSERT
和 SELECT SCOPE_IDENTITY()
。
Screenshots of test
插入用户前
插入用户后