Sto cercando di creare una tabella di join che combini la tabella Employee e Tractor per registrare ogni volta che un dipendente viene assegnato / non assegnato un camion. Sono in grado di registrare un ID dipendente iniziale e un ID del camion ma il codice si arresta in modo anomalo una volta che provo a registrare il secondo ID impiegato e ID Truck in un'altra ora e giorno. Pertanto, l'oggetto Datetime è sempre univoco.
Questo è l'errore che mostra:
SqlException: violazione del vincolo PRIMARY KEY "PK_DriverTractorsAssignmentHistory". Impossibile inserire la chiave duplicata nell'oggetto "dbo.DriverTractorsAssignmentHistory". Il valore della chiave duplicata è (1, 2). La dichiarazione è stata chiusa.
Usare una relazione Molti a molti era l'unica soluzione che potevo pensare di catturare ogni volta che a un dipendente viene assegnato un camion. Pls mi mostra una soluzione migliore se ne hai uno
public class Employee
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public int? TractorID { get; set; }
public virtual Tractor Tractor { get; set; }
public virtual List<DriverTractorAssignmentHistory>DriverTractorAssignmentHistories { get; set; }
}
public class Tractor
{
public int TractorID { get; set; }
public string TruckNumber {get; set;}
public string Status { get; set; }
public virtual Employee Employee { get; set; }
public virtual List<DriverTractorAssignmentHistory> DriverTractorAssignmentHistories { get; set; }
public Tractor()
{
Status = "Available";
}
}
public class TrailerOrderDbContext:DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<DriverTractorAssignmentHistory> DriverTractorsAssignmentHistory { get; set; }
public DbSet<Tractor> Tractors { get; set; }
public TrailerOrderDbContext(DbContextOptions<TrailerOrderDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<DriverTractorAssignmentHistory>().HasKey(co => new { co.EmployeeId, co.TractorId });
modelBuilder.Entity<DriverTractorAssignmentHistory>()
.HasOne(e => e.Driver)
.WithMany(c => c.DriverTractorAssignmentHistories)
.HasForeignKey(trac => trac.TractorId);
modelBuilder.Entity<DriverTractorAssignmentHistory>()
.HasOne(trac => trac.Tractor)
.WithMany(c => c.DriverTractorAssignmentHistories)
.HasForeignKey(e => e.EmployeeId);
}
}
Rimuovi questa riga di codice in OnModelCreating(ModelBuilder modelBuilder)
perché questa riga di codice impedisca l'immissione di dati duplicati e impedisca il mapping many-to-many
:
modelBuilder.Entity<DriverTractorAssignmentHistory>()
.HasKey(co => new { co.EmployeeId, co.TractorId });
O modificare come sotto se nel caso sia necessaria unique key
:
modelBuilder.Entity<DriverTractorAssignmentHistory>()
.HasKey(co => new { co.EmployeeId, co.TractorId, co.AssignTimestamp };