I have an MVC controller that works like this:
[HttpPost("EditRegistroIncidencias")]
public async Task<IActionResult> EditRegistroIncidencias(CatRegistroIncidencias ReInci, string Obse, CatBitacoraIncidencias BitInci)
{
try
{
var RegInci = _context.CatRegistroIncidencias.Where(x => x.ReInciId == ReInci.ReInciId).First();
if (ReInci != null)
{
var ListaDetalleFlujos = _context.CatDetalleFlujo.OrderBy(x => x.DetFlujoId).ToList();
var DetalleFlujos = _context.CatDetalleFlujo.Where(x => x.DetFlujoId == RegInci.ReInciEstatusFlujo).First();
var Flujos = _context.CatDetalleFlujo.Where(x => x.DetFlujoFlujoId == DetalleFlujos.DetFlujoFlujoId).ToList();
var OrdenNuevo = 0;
var NuevoIdFlujo = 0;
for (int i = 0; i < Flujos.Count; i++)
{
var OrdenActual = DetalleFlujos.DetFlujoOrden;
if (RegInci.ReInciEstatusId != 6 || RegInci.ReInciEstatusId != 5) // Validación para que si llega un registro YA cerrado o cancelado, no permita seguir
{
if (ReInci.ReInciEstatusId == 5 || ReInci.ReInciEstatusId == 4) // Validación para cerrar registro
{
var RegistroCerrado = Flujos[i].DetFlujoId;
NuevoIdFlujo = RegistroCerrado;
}
else if (ReInci.ReInciEstatusId == 9 || ReInci.ReInciEstatusId == 3)
{ // Validación para cuando el registro es regresado para revisión
var RegistroReiniciado = Flujos[i].DetFlujoId;
NuevoIdFlujo = RegistroReiniciado;
break;
}
else
{
if (DetalleFlujos.DetFlujoId == Flujos[i].DetFlujoId) // Validación para flujo normal
{
if (Flujos.Count != i)
{
if (OrdenActual != Flujos.Count)
{
OrdenNuevo = OrdenActual + 1;
var NuevoFlujo = Flujos.Where(x => x.DetFlujoOrden == OrdenNuevo).First();
NuevoIdFlujo = NuevoFlujo.DetFlujoId;
break;
}
}
}
}
}
}
BitInci.BitInciReInciId = ReInci.ReInciId;
BitInci.BitInciUserId = user.UserName;
BitInci.BitInciFecha = FechaActual;
BitInci.BitInciObservaciones = Obse;
BitInci.BitInciDetFlujoId = NuevoIdFlujo;
_context.CatBitacoraIncidencias.Add(BitInci);
_context.SaveChanges();
RegInci.ReInciEmpId = ReInci.ReInciEmpId;
RegInci.Fecha = ReInci.Fecha;
RegInci.ReInciInciId = ReInci.ReInciInciId;
RegInci.ReInciEstatusId = ReInci.ReInciEstatusId;
RegInci.ReInciEstatusFlujo = NuevoIdFlujo;
_context.Entry(RegInci).State = EntityState.Modified;
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
else
{
return BadRequest();
}
}
catch (Exception)
{
throw;
}
}
}
}
And when I want to record a log precisely from the incident log, I get the following error: *
The instance of Entity type cannot be tracked because another instance with the same key value is already being tracked
And my Javascript function that sends all the data works correctly, it is the following:
function EditRegistroIncidencias() {
event.preventDefault();
var x = $("#EditRegistroIncidencias").valid(); // Edita el nombre
var observaciones2 = document.getElementById("ObservacionesRegistros").value;
if (x != false) {
Swal.fire({
title: '¿Desea Guardar los cambios?',
text: "¡No se podrá revertir!",
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
cancelButtonText: 'Cancelar',
confirmButtonText: 'Aceptar'
}).then((result) => {
if (result.value) {
var reginci = { // Edita los nombres de las variables
ReInciId: $("#Id").val(),
ReInciEmpId: $("#ReInciEmpIdE").val(),
Fecha: $("#FechaE").val(),
ReInciInciId: $("#ReInciInciIdE").val(),
ReInciEstatusId: $("#ReInciEstatusIdE").val()
}
var observaciones = {
Observaciones: $("#ObservacionesRegistros").val()
}
$.ajax({
type: "POST",
url: "/EditRegistroIncidencias", // Edita el nombre
data: { ReInci: reginci, Obse: observaciones2 },
beforeSend: function () {
$("#btnEditRegistroIncidencias").prop("disabled", true); // Edita el nombre
Swal.fire({
title: 'Guardando...',
allowEscapeKey: false,
allowOutsideClick: false,
showConfirmButton: false,
onOpen: () => {
Swal.showLoading();
}
});
},
complete: function (data) {
swal({
type: 'success',
title: '¡Listo!.',
text: "Se ha guardado con éxito"
}).then((result) => {
location.reload();
});
},
error: function (data) {
alert('ERROR AL OBTENER DATOS');
}
});
}
});
}
}
I have tried the function of :
_context.Entry(RegInci).State = EntityState.Modified;
await _context.SaveChangesAsync();
add Detached instead of Modified and it doesn't work. I even declared :
_context.Entry(RegInci).State = EntityState.Detached;
_context.Set<CatRegistroIncidencias>.Update(RegInci);
And it doesn't work either. I don't know if I'm doing something wrong or if it's done differently.