我在 ASP.NET Core 中有這些模型:
public abstract class EntityBase
{
[Key]
public int Id { get; set; }
}
public class User : EntityBase
{
public string Username { get; set; }
public string Password { get; set; }
public virtual ICollection<Merchant> Merchants { get; set; }
}
public class Merchant : EntityBase
{
public string MerchantName { get; set; }
public string AccountNumber { get; set; }
public int? UserId { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
public virtual ICollection<Mandate> Mandates { get; set; }
}
視圖模型(DTO):
public class RegisterDto
{
public string MerchantName { get; set; }
[Required(ErrorMessage = "Account Number is required")]
[MaxLength(50)]
public string AccountNumber { get; set; }
[MaxLength(100)]
[Required(ErrorMessage = "Username is required")]
[RegularExpression(@"^\S*$", ErrorMessage = "No white space allowed")]
public string Username { get; set; }
[MaxLength(128)]
[Required(ErrorMessage = "Password is required")]
public string Password { get; set; }
}
物體映射器:
public class EntityMapper
{
public User FromRegisterDtoToUser(RegisterDto register)
{
User user = new User()
{
Username = register.Username,
Password = register.Password,
};
return user;
}
public Merchant FromRegisterDtoToMerchant(RegisterDto register)
{
Merchant merchant = new Merchant()
{
MerchantName = register.MerchantName,
AccountNumber = register.AccountNumber,
UserId = ?
};
return merchant;
}
}
身份驗證服務:
public async Task<UserDto> register(RegisterDto register)
{
var userExists = await _unitOfWork.UserRepository.GetByUsername(register.Username);
if (userExists != null)
{
throw new Exception("User already exists!");
}
else
{
try
{
register.Password = User.ComputeSha256Hash(register.Password);
var mapper = new EntityMapper();
var user = mapper.FromRegisterDtoToUser(register);
var merchant = mapper.FromRegisterDtoToMerchant(register);
await _unitOfWork.UserRepository.Insert(user);
await _unitOfWork.MerchantRepository.Insert(merchant);
await _unitOfWork.SaveChangesAsync();
if (user != null)
{
var token = GetToken(user);
var map = new EntityMapper();
return map.FromUserToUserDto(user, token);
}
return null;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
}
Merchant 中的 UserId 是 User 中 Id 的外鍵。Id 是自動生成的。
由于用戶和商家資料是同時插入的,我想自動插入 UserId 作為從 User 生成的 Id 在:
Merchant merchant = new Merchant()
{
MerchantName = register.MerchantName,
AccountNumber = register.AccountNumber,
UserId = ...?
};
我如何實作這一目標?
謝謝
uj5u.com熱心網友回復:
我不確定您使用的是什么資料庫技術/框架(我假設是物體框架)但是如果UserId是在資料庫插入時生成的,您將需要在插入用戶后保存對資料庫的更改,并在插入時再次執行商人。基本上
await _unitOfWork.UserRepository.Insert(user);
await _unitOfWork.SaveChangesAsync(); // user should have an id now.
merchant.UserId = user.Id;
await _unitOfWork.MerchantRepository.Insert(merchant);
await _unitOfWork.SaveChangesAsync();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/364419.html
