Как правильно настроить отложенную загрузку - PullRequest
0 голосов
/ 24 ноября 2018

В представленной ниже модели просмотра я вижу, что part.CountryCode всегда null.

Я могу получить данные, если использую db.Parts.Include(p => p.CountryCode), но я хотел бы настроить отложенную загрузку длясейчас.Кто-нибудь знает, что мне не хватает?

Я использую:

  • Microsoft.EntityFrameworkCore (2.1.4) в NETStandard.Library(2.0.3)
  • Пользовательский интерфейс WPF с .NET 4.6.1

ViewModel

class PagePartsViewModel : BaseViewModel
{
    public ObservableCollection<PartViewModel> Parts { get; set; }

    public PagePartsViewModel()
    {
        Parts = new ObservableCollection<PartViewModel>();
        var parts = StandardDatabase.Commands.GetParts();
        foreach (var part in parts)
        {
            Parts.Add(new PartViewModel(part));
        }
    }
}

GetParts ()

public static List<Part> GetParts()
{
    using (var db = new ApplicationDbContext())
    {
        return db.Parts.ToList();
    }
}

ApplicationDbContext.OnConfiguring ()

optionsBuilder
    .UseLazyLoadingProxies()
    .UseSqlServer("Connection String");

ApplicationDbContext.OnModelCreating ()

builder.Entity<Part>()
    .HasOne(p => p.CountryCode);
builder.Entity<CountryCode>()
    .HasAlternateKey(cc => cc.Code);

Part.cs

public class Part : EntityBase
{
    public string OEMNumber { get; set; }
    public string Description { get; set; }
    public string CountryOfOrigin { get; set; }
    [Column(TypeName = "decimal(10, 2)")]
    public decimal BellUnitCost { get; set; }
    [Column(TypeName = "decimal(9, 3)")]
    public double Weight { get; set; }

    public virtual StockQuantity StockQuantity { get; set; }
    public virtual ICollection<PartQuantity> PartQuantities { get; set; }

    public virtual CountryCode CountryCode { get; set; }
}

CountryCode.cs

public class CountryCode : EntityBase
{
    public string Code { get; set; }
    public string FriendlyName { get; set; }

    public virtual ICollection<Part> Parts { get; set; }
}

1 Ответ

0 голосов
/ 24 ноября 2018
using (var db = new ApplicationDbContext())
{
    return db.Parts.ToList();
}

Блок using удаляет ваш dbContext, как только он заканчивает загрузку ваших деталей.Ленивая загрузка требует, чтобы dbContext был еще жив.

...