我正在尝试进行错误记录并将这些错误写入SQL数据库。我正在使用LINQ。我将无效的JSON格式发布到ASP.NET Core Web API,以创建异常(使用try-catch),然后可以使用该异常来填充ErrorLog的属性。
ErrorLog对象具有填充的属性,但是不会插入数据库,因为插入用户失败。即使那是目的。
ErrorLog对象:
public Guid ID { get; set; }
public Guid UserID { get; set; }
public string Message { get; set; }
public string StackTrace { get; set; }
public string Description { get; set; }
public DateTime TimeOfError { get; set; }
用户对象:
public Guid ID { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public DateTime AccountCreated { get; set; }
public bool IsAdmin { get; set; }
我们捕获异常的UserController:
[HttpPost]
[Route("registerUser")]
public async Task<IActionResult> CreateAsync([FromBody]User user)
{
try
{
await _userService.PostRegistration(user);
return Ok();
}
catch(Exception ex)
{
ErrorLog log = new ErrorLog();
log.ID = Guid.NewGuid();
log.UserID = Guid.Parse("00000000-0000-0000-0000-000000000000");
log.Message = ex.Message;
log.StackTrace = ex.StackTrace;
log.Description = "Creating a user has failed";
log.TimeOfError = DateTime.Now;
//log = LogConvert.ConvertExceptionToErrorLog(ex, "", null);
await _logService.PostError(log);
return BadRequest(ModelState);
}
}
在SQL数据库中插入ErrorLog的存储库功能:
public async Task PostError(ErrorLog errorLog)
{
try
{
// Add Log object to the database
_dbContext.ErrorLogs.Add(errorLog);
await _dbContext.SaveChangesAsync();
}
catch (Exception ex)
{
throw ex;
}
}
用于在SQL数据库中插入用户的存储库功能:
public async Task PostRegistration(User user)
{
try
{
_dbContext.Users.Add(user);
await _dbContext.SaveChangesAsync();
}
catch (Exception ex)
{
throw ex;
}
}
这是我尝试将ErrorLog插入SQL数据库时遇到的异常:
System.Data.SqlClient.SqlException:无法将NULL值插入 列“电子邮件”,表“ bookoverview_db.dbo.Users”;列不 允许为空。 INSERT失败。