经过一段时间调查我的导航属性为什么再次填充我刚删除的实体(使用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一切都很完美 .