Через некоторое время, расследуя, почему мое свойство навигации снова заполняется только что удаленными сущностями (используя entity.NavigationPropertiesCollection = new List <> ()), я понял, что с entity.NavigationPropertiesCollection.Clear () все работает нормально , У меня вопрос: почему Entity Framework Core снова загружает свойства навигации после повторной инициализации коллекции свойств навигации и почему с entity.NavigationPropertiesCollection.Clear () все работает нормально? (удаляет их как положено)
Необходимые пакеты nuget:
Microsoft.EntityFrameworkCore.Proxies
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Необходимый код:
public class FooChildEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class FooParentEntity
{
public int Id { get; set; }
public string Title { get; set; }
public virtual List<FooChildEntity> FooChildEntities { get; set; }
}
internal class FooDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseLazyLoadingProxies()
.UseSqlServer(@"Server=.\sqlexpress;Database=fooDb;Trusted_Connection=True;");
}
public DbSet<FooParentEntity> FooParentEntities { get; set; }
}
Код для воспроизведения:
Сначала запустите этот код:
FooParentEntity fooParentEntityInput = new FooParentEntity
{
Title = "cool title",
FooChildEntities = new List<FooChildEntity>
{
new FooChildEntity
{
Name = "FirstChild"
},
new FooChildEntity
{
Name="SecondChild"
}
}
};
FooDbContext fooDbContext = new FooDbContext();
fooDbContext.FooParentEntities.Add(fooParentEntityInput);
fooDbContext.SaveChanges();
и удалите его или закомментируйте.
После этого следующий код использует точки останова, как на скриншотах
FooDbContext fooDbContext = new FooDbContext();
FooParentEntity fooParentEntityDb = fooDbContext.FooParentEntities.ToList().FirstOrDefault();
fooParentEntityDb.FooChildEntities = new List<FooChildEntity>();
fooParentEntityDb.FooChildEntities.Add(new FooChildEntity { Name = "ThirdChild" });
Здесь появляется ошибка: https://i.stack.imgur.com/tZ1j0.png
Однако если
использование нескольких точек останова при отладке, как на скриншотах:
https://i.stack.imgur.com/naCxJ.png
https://i.stack.imgur.com/Ky7K5.png
https://i.stack.imgur.com/iziRr.png
Все отлично работает.