EF ChangeTracker实体集合始终为0

时间:2017-07-12 20:41:21

标签: c# entity-framework

为了对所有实体删除执行某些操作,我试图像这样处理它:

mat

我需要在删除过程中根据实体集合属性计数处理一些实体集合,但它总是返回0,即使集合中有很多项目。

public override int SaveChanges()
{
    var deletedEntities = ChangeTracker.Entries()
        .Where(p => p.State == EntityState.Deleted).ToList();

    foreach (var deletedEntity in deletedEntities)
    {
        //((SampleEntity)deletedEntity.Entity).SuperCollection.Count();
    }

    return base.SaveChanges();
}

我知道为什么我的馆藏在这时总是0?

我的模型正确延迟加载编码如下,我的集合在SaveChanges()

之外运行良好
((SampleEntity)deletedEntity.Entity).SuperCollection.Count();

祝你好运

1 个答案:

答案 0 :(得分:0)

之前致电DetectChanges:

public override int SaveChanges()
{
    ChangeTracker.DetectChanges();
    //...
    return base.SaveChanges();
}

否则,仅在base.SaveChanges()方法中检测到更改。

EF将删除对已删除的entites的相关对象的所有引用。如果您需要保存此关系,可以将它们保存在本地字段中:

class UnitCompany
{
    private SampleEntity _entity;
    private SampleEntity _prevEntity;

    publc SampleEntity Entity
    {
        get { return _entity; }
        set 
        { 
            if (value != null)
            {
                _prevEntity = value;
            }
            _entity = value;
        }
    }
}

_prevEntity会保持与相关对象的关联,您可以在SaveChanges

中获取相关对象