Существует множество сообщений о том, как отключить отложенную загрузку в Entity Framework, но те же методы не работают в EF Core.Я нашел свойство LazyLoadingEnabled
в трекере изменений, но, похоже, это не работает вообще.
Все указывает на это в EF:
this.Configuration.LazyLoadingEnabled = false;
Но, Configuration
свойство отсутствует в EF Core.
Вот пример того, о чем я говорю:
public class TestContext : DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<Address> Addresses { get; set; }
public TestContext()
{
this.ChangeTracker.LazyLoadingEnabled = false;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connection = new SqliteConnection($"Data Source=Test.db");
connection.Open();
var command = connection.CreateCommand();
command.CommandText = $"PRAGMA foreign_keys = ON;";
command.ExecuteNonQuery();
optionsBuilder.UseSqlite(connection);
optionsBuilder.UseLazyLoadingProxies(false);
base.OnConfiguring(optionsBuilder);
}
private static void Main(string[] args)
{
Console.WriteLine("Hello World!");
using (var context = new TestContext())
{
context.Database.EnsureCreated();
var personKey = Guid.NewGuid().ToString();
var addressKey = Guid.NewGuid().ToString();
context.People.Add(new Entities.Person { PersonKey = personKey, BillingAddress = new Entities.Address { AddressKey = addressKey } });
context.SaveChanges();
}
using (var context = new TestContext())
{
var people = context.People.ToList();
foreach (var person in people)
{
if (person.BillingAddress == null) throw new Exception("The billing address wasn't loaded");
}
}
}
}
Выше выдается исключение, потому что BillingAddress
не загружается, хотя яотключил ленивую загрузку.
Я подозреваю, что это ошибка, но, пожалуйста, скажите мне, что это не так.Я зарегистрировал это здесь: https://github.com/aspnet/EntityFrameworkCore/issues/15802
Вы можете скачать образец здесь: https://www.dropbox.com/s/mimvgvcmibr7em2/EFSQLiteTest.7z?dl=0