work unit pattern patron mvc framework example c# entity-framework-6 repository-pattern eager-loading ef-fluent-api

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.