Ленивая загрузка не поддерживается, исключение выдается, несмотря на то, что объект не отключен - PullRequest
0 голосов
/ 27 февраля 2020

"Была предпринята попытка lazy-load для свойства навигации« Box »на отдельном объекте типа« AppleProxy ». Lazy-loading не поддерживается для отдельных объектов или объектов, которые загружены с помощью« AsNoTracking () »."

Но я никогда не использую AsNoTracking или вызываю detach для сущностей.

Я написал быстрый тест:

        using var db = new DatabaseContext();
        {
            var b= db.Box.Find(boxId);
            Assert.NotNull(b.Apples);
        }

Но это не удалось. Это мои модели:

public class Apple
{
public int BoxID { get; set; }

public virtual Box Box { get; set; }

public int Number { get { return (int)V2.X; } set { V2 = new Vector2(value, 0); } }

public Vector2 V2 {get;set;}
}

public class Box : IEnumerable<Apple>
{
[Key]
public int ID { get; set; }
public virtual  ICollection<Apple> Apples { get; set; }

public IEnumerator<Apple> GetEnumerator()
{
    return Apples.GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
    return Apples.GetEnumerator();
}
}

Контекст:

public DbSet<Apple> Apples { get; set; }

public DbSet<Box> Boxes { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .UseLazyLoadingProxies();
    }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Apple>()
     .HasOne(a => a.Box)
     .WithMany(a => a.Apples)
     .IsRequired();

    modelBuilder.Entity<Apple>()
        .Ignore(a => a.V2)
        .HasKey(a => new { a.BoxID, a.Number });
}
...