Код: Выделить всё
CREATE TABLE LogsEjecucion
(
LogID INT PRIMARY KEY IDENTITY(1,1),
TareaID INT NOT NULL,
EstadoID INT NOT NULL,
Mensaje NVARCHAR(MAX),
FechaLog DATETIME DEFAULT GETDATE(),
CONSTRAINT FK_LogsEjecucion_Tareas
FOREIGN KEY (TareaID) REFERENCES Tareas(TareaID),
CONSTRAINT FK_LogsEjecucion_EstadosTarea
FOREIGN KEY (EstadoID) REFERENCES EstadosTarea(EstadoID)
);
ALTER TABLE LogsEjecucion
ADD Descripcion NVARCHAR(MAX),
FechaCreacion DATETIME DEFAULT GETDATE();
CREATE TABLE EstadosTarea
(
EstadoID INT PRIMARY KEY IDENTITY(1,1),
NombreEstado NVARCHAR(50) NOT NULL UNIQUE
);
При обработке запроса произошло необработанное исключение.
SqlException : Инструкция INSERT конфликтует с ограничением FOREIGN KEY «FK_LogsEjecucion_EstadosTarea». Конфликт возник в базе данных «ProyectoPrograDB», таблица «dbo.EstadosTarea», столбец «EstadoID».
Microsoft.Data.SqlClient.SqlConnection.OnError(исключение SqlException, boolbreakConnection, Действие WrapCloseInAction)
DbUpdateException: произошла ошибка при сохранении изменений объекта. Подробности смотрите во внутреннем исключении.
Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.ConsumeResultSetAsync(int startCommandIndex, RelationalDataReader Reader, CancellationToken cancelToken)
Ошибка в VS:
Код: Выделить всё
SET IMPLICIT_TRANSACTIONS OFF;
SET NOCOUNT ON;
INSERT INTO [LogsExecution] ([Description], [StatusID], [CreationDate], [Message], [TaskID])
OUTPUT INSERTED.[LogID], INSERTED.[LogDate]
VALUES (@p0, @p1, @p2, @p3, @p4);
'AdvancedProgrammingProject.exe' (CoreCLR: clrhost): 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.11\System.Reflection.Metadata.dll' loaded. Symbol loading skipped. The module is optimized and the debugger option 'Just my code' is enabled.
> Microsoft.EntityFrameworkCore.Update: Error: An exception occurred in the database while saving changes for context type 'ProyectoProgramacionAvanzada.Models.ProyectoPrograDbContext'.
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
>
> Microsoft.Data.SqlClient.SqlException (0x80131904): INSERT statement conflicted with FOREIGN KEY constraint 'FK_LogsEjecucion_EstadosTarea'. The conflict has occurred in database 'ProyectoPrograDB', table 'dbo.EstadosTarea', column 'EstadoID'.
at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
>
> at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
> at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at Microsoft.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
at Microsoft.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
at Microsoft.Data.SqlClient.SqlDataReader.ReadAsyncExecute(Task task, Object state)
at Microsoft.Data.SqlClient.SqlDataReader.InvokeAsyncCall[T](SqlDataReaderBaseAsyncCallContext`1 context)
Код: Выделить всё
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.EstadoID).HasName("PK__EstadosT__FEF86B603D2331A8");
entity.ToTable("EstadosTarea");
entity.HasIndex(e => e.NombreEstado, "UQ__EstadosT__6CE50615135F16DF").IsUnique();
entity.Property(e => e.EstadoID).HasColumnName("EstadoID");
entity.Property(e => e.NombreEstado).HasMaxLength(50);
});
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.LogId).HasName("PK__LogsEjec__5E5499A8CC80DE29");
entity.ToTable("LogsEjecucion");
entity.Property(e => e.LogId).HasColumnName("LogID");
entity.Property(e => e.EstadoID).HasColumnName("EstadoID");
entity.Property(e => e.FechaLog)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime");
entity.Property(e => e.TareaId).HasColumnName("TareaID");
entity.HasOne(d => d.Estado).WithMany(p => p.LogsEjecucion)
.HasForeignKey(d => d.EstadoID)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_LogsEjecucion_EstadosTarea");
entity.HasOne(d => d.Tarea).WithMany(p => p.LogsEjecucions)
.HasForeignKey(d => d.TareaId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_LogsEjecucion_Tareas");
});
Код: Выделить всё
// GET: LogsEjecucion/Create
public IActionResult Create()
{
ViewData["EstadoID"] = new SelectList(_context.EstadosTareas, "EstadoID", "NombreEstado");
ViewData["TareaId"] = new SelectList(_context.Tareas, "TareaId", "TareaId");
return View();
}
// POST: LogsEjecucion/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task Create([Bind("LogId,TareaId,EstadoId,Mensaje,FechaLog,Descripcion,FechaCreacion")] LogsEjecucion logsEjecucion)
{
if (!ModelState.IsValid)
{
_context.Add(logsEjecucion);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
ViewData["EstadoID"] = new SelectList(_context.EstadosTareas, "EstadoID", "EstadoID", logsEjecucion.EstadoID);
ViewData["TareaId"] = new SelectList(_context.Tareas, "TareaId", "TareaId", logsEjecucion.TareaId);
return View(logsEjecucion);
}
Код: Выделить всё
using System;
using System.Collections.Generic;
namespace ProyectoProgramacionAvanzada.Models;
public class LogsEjecucion
{
public int LogId { get; set; }
public int TareaId { get; set; }
public int EstadoID { get; set; }
public string? Mensaje { get; set; }
public DateTime? FechaLog { get; set; }
public virtual EstadosTarea Estado { get; set; } = null!;
public virtual Tarea Tarea { get; set; } = null!;
public string Descripcion { get; set; } = null!;
public DateTime FechaCreacion { get; set; }
}
Код: Выделить всё
using System;
using System.Collections.Generic;
namespace ProyectoProgramacionAvanzada.Models;
public class EstadosTarea
{
public int EstadoID { get; set; }
public string NombreEstado { get; set; } = null!;
// Propiedad para los LogsEjecucion (asegúrate de que esto sea necesario)
public virtual ICollection LogsEjecucion { get; set; } = new List();
public virtual ICollection Tareas { get; set; } = new List();
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... e-restrict