Ho separato il Contesto di lettura da Scrivi ora Attiverò LazyLoading in ReadOnlyContext per impostazione predefinita. Ho anche usato il seguente metodo, ma sfortunatamente non funziona.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseLazyLoadingProxies()
.UseSqlServer(@"Data Source=.;Initial Catalog=UniversityDb;Persist Security Info=True;User ID=admin;Password=asdasdsadasd");
}
il mio modello:
public class Partner : BaseEntity<int>
{
public string Name { get; set; }
public DateTime CreateDate { get; set; }
public bool IsDisabled { get; set; }
public bool IsDeleted { get; set; }
public virtual ICollection<PartnerUser> PartnerUsers { get; set; }
}
la mia versione ef:
EntityFramework core v 2.1.2
public async Task<PartnerQuery> Get(int id)
{
var result = await _partnerDbSet.SingleAsync(c => c.Id == id);
var list = result.PartnerUsers;
return new PartnerQuery()
{
CreateDate = result.CreateDate,
Name = result.Name,
Id = result.Id
};
}
Ho ricevuto questo errore:
"Errore generato per avviso" Microsoft.EntityFrameworkCore.Infrastructure.DetachedLazyLoadingWarning: è stato effettuato un tentativo di caricare la proprietà di navigazione "PartnerUsers" su entità distaccata di tipo "PartnerProxy". Il caricamento lento non è supportato per entità o entità separate caricate con 'AsNoTracking ()'. '. Questa eccezione può essere soppressa o registrata passando l'ID evento' CoreEventId.DetachedLazyLoadingWarning 'al metodo' ConfigureWarnings 'in' DbContext.OnConfiguring 'o' AddDbContext '. "
Come può essere risolto questo problema?
Si sta utilizzando AsNoTracking()
da qualche parte nel codice, il caricamento AsNoTracking()
non funzionerà quando si utilizza il metodo AsNoTracking()
.
Hai due opzioni:
Usa il metodo Include()
per caricare le tue relazioni
Ignora l'avviso e ottieni semplicemente null
per le tue relazioni
Puoi configurare EF per ignorare questo errore:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseLazyLoadingProxies()
.ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.DetachedLazyLoadingWarning))
.UseSqlServer(@"Data Source=.;Initial Catalog=UniversityDb;Persist Security Info=True;User ID=admin;Password=asdasdsadasd");
}