Update() 方法有效,但 Create() 不在 C# API 中

问题描述 投票:0回答:1

我的代码是一个 API,用于更新和创建数据库中的各种表。对于其他所有类,除了这个类:Operacao 之外,它都在工作。 Update() 方法工作正常,但 Create() 方法不起作用。

这是班级:

    public class Operacao
{
    public virtual short OperacaoID { get; set; }
    public virtual short? Codigo { get; set; }
    public virtual string Nome { get; set; }
    public virtual string? Descricao { get; set; }
    public virtual bool FlagAtivo { get; set; }
    public virtual bool FlagPadrao { get; set; }
    public virtual int DtUpdate { get; set; }
   
}

这是用户输入的数据:

 public class OperacaoDados
{
 [Key]
 [JsonIgnore]
 public short OperacaoID { get; set; }
 [NotMapped]
 public virtual string Nome { get; set; }
 public virtual string? Descricao { get; set; }

}

这是控制器:

 [HttpPost]
 [Authorize]
 public async Task<ActionResult> PostOperacao(OperacaoDados operacaoDados)
 {

 var operacaoExistente = await _context.Operacao.FirstOrDefaultAsync(o => o.Nome == 
 operacaoDados.Nome);
 DateTime dateTime = DateTime.UtcNow;
 long ticks = dateTime.Ticks;
 int dataInteiro = (int)(ticks & 0xFFFFFFFF);

 if (operacaoExistente != null)
 {

     operacaoExistente.Descricao = operacaoDados.Descricao;
     operacaoExistente.FlagAtivo = true;

     try
     {
         await _operacaoRepository.Update(operacaoExistente);
         return Ok("Operação atualizada com sucesso");
     }
     catch (DbUpdateConcurrencyException)
     {
         // Handle the concurrency exception here
         return Conflict("A operação que você está tentando atualizar foi modificada por outro usuário.");
     }
 }
 else
 {

     Operacao novoOperacao = new Operacao
     {
         Codigo = short.Parse(operacaoDados.Nome),
         DtUpdate = dataInteiro,
         Nome = operacaoDados.Nome,
         Descricao = operacaoDados.Descricao,
         FlagAtivo = true,
         FlagPadrao = false
     };

     var result = await _operacaoRepository.Create(novoOperacao);

     if (result != null)
     {
         return Ok("Operação cadastrada com sucesso");
     }

     return BadRequest("Erro ao salvar Operação");
 }

}

这是存储库:

  public async Task<Operacao> Create(Operacao operacao)
  {
  _context.Operacao.Add(operacao);
  await _context.SaveChangesAsync();

  return operacao;
  }
  public async Task Update(Operacao operacao)
  {
   _context.Entry(operacao).State = EntityState.Modified;
   await _context.SaveChangesAsync();
  }

用该方法保存时出现错误:“await _context.SaveChangesAsync();”在 Create() 方法中。这是错误:

Microsoft.EntityFrameworkCore.Database.Command: Information: 
Executed DbCommand (12ms) [Parameters=[@p0='?' (DbType = Int16), 
@p1='?' (Size = 4000), @p2='?' (DbType = Int32), @p3='?' (DbType = Boolean), @p4='?' (DbType = Boolean), @p5='?' (Size = 4000)], 
CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
INSERT INTO [Operacao] ([Codigo], [Descricao], [DtUpdate], [FlagAtivo], [FlagPadrao], [Nome])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5);
SELECT [OperacaoID]
FROM [Operacao]
WHERE @@ROWCOUNT = 1 AND [OperacaoID] = scope_identity();
Exceção gerada: 
'Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException' em Microsoft.EntityFrameworkCore.Relational.dll
Exceção gerada: 
'Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException' em System.Private.CoreLib.dll 
c# sql asp.net .net api
1个回答
0
投票

我想通了。这是我的 SQL 中的一个错误。通过删除表 Operacao 中的触发器解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.