c# - unit - repository pattern obsolete
La carga ansiosa utilizando EF8 Fluent Api con una clave compuesta falla al cargar Entidad relacionada (0)
Debo crear incorrectamente la composite key o conectarla incorrectamente a la related entity . Puedo hacer que funcione en un escenario simplificado de una sola clave, pero la composite key falla. Mostraré versiones que funcionan y no funcionan.
Mis clases:
public class Parts {
public string PartID { get; set; }
public string Revision { get; set; }
}
public class InstanceHistories {
public int HistoryID { get; set; }
public string PartID { get; set; }
public string Revision { get; set; }
public virtual Parts Part { get; set; }
}
Fluent API - Eso funciona
modelBuilder.Entity<Parts>().HasKey(p => new { p.PartID });
modelBuilder.Entity<InstanceHistories>().HasKey(i => i.HistoryID);
modelBuilder.Entity<InstanceHistories>().HasRequired(i => i.Part);
Repo call
history = await repo.All
.Include(b => b.Part)
.Where(i => i.PartID== partIDToSearch).ToListAsync();
Esta llamada de reposición cargará mi objeto Part relacionado sin ningún problema.
Cuando cambio la API de Fluent para hacer que la pieza tenga una composite key , mi llamada de reposición ya no devolverá la related entity .
Actualización Fluent API que no funciona
modelBuilder.Entity<Parts>().HasKey(p => new { p.PartID, p.Revision });
He intentado algunos escenarios diferentes de .WithMany() , .HasForeignKey() , .HasOptional() pero nada parece devolverle la Parte. Incluso intenté Lazy Load y no volverán así que sé que algo debe estar listo con mi configuración. ¿Alguien ha encontrado este escenario?
Editar
Incluso cuando uow.Context.Database.Log = Console.WriteLine;), a que se muestre el SQL (es decir, uow.Context.Database.Log = Console.WriteLine;), veo que la entidad relacionada aparece en el resultado unido.
Además, no recibo ningún error. Solo retorno nulo en el objeto Parte.