无法将ErrorLog插入数据库,因为在数据库中插入用户失败

时间:2018-07-01 15:43:08

标签: linq asp.net-core-mvc asp.net-apicontroller

我正在尝试进行错误记录并将这些错误写入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失败。

0 个答案:

没有答案