我的代码是一个 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
我想通了。这是我的 SQL 中的一个错误。通过删除表 Operacao 中的触发器解决了该问题。