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.