Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF ChangeTracker实体集合计数始终为0_C#_Entity Framework - Fatal编程技术网

C# EF ChangeTracker实体集合计数始终为0

C# EF ChangeTracker实体集合计数始终为0,c#,entity-framework,C#,Entity Framework,为了对所有实体删除执行一些操作,我尝试如下处理: public override int SaveChanges() { var deletedEntities = ChangeTracker.Entries() .Where(p => p.State == EntityState.Deleted).ToList(); foreach (var deletedEntity in deletedEntities) { //((Samp

为了对所有实体删除执行一些操作,我尝试如下处理:

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,即使集合有许多项

((SampleEntity)deletedEntity.Entity).SuperCollection.Count();
知道为什么我的收藏在这一点上总是0吗?

我的模型是正确的延迟加载代码,如下所示,我的集合在SaveChanges()之外运行得非常好

公共部分类SampleEntity
{
公共int MyId{get;set;}
公共字符串说明{get;set;}
公共样本实体()
{
this.SuperCollection=newhashset();
}
公共虚拟ICollection超级集合{get;set;}
}

致以最诚挚的问候

在以下时间之前呼叫检测更改:

public override int SaveChanges()
{
    ChangeTracker.DetectChanges();
    //...
    return base.SaveChanges();
}
否则,仅在
base.SaveChanges()方法中检测到更改

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

class UnitCompany
{
    private SampleEntity _entity;
    private SampleEntity _prevEntity;

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

\u preventility
保留与相关对象的链接,您可以在
保存更改中获取它

调用DetectChanges()我也遇到了同样的问题。事实上,ChangeTracker正在按预期跟踪更改。调试我的代码我注意到我的实体在执行
db.SampleEntity.Remove(db.SampleEntity.Find(1234)
之后,甚至在输入
public override int SaveChanges(){}之前,就失去了所有集合属性关系计数
。我做错了什么?@RubensMussiCury这是EF的工作方式。删除实体后,它将删除与子/父实体的所有关系。当我设置为删除/删除我的实体时,您是否有任何建议以保持这些关系?@RubensMussiCury您可以在删除操作之前将属性值保存到某个字段中,然后将属性值导出这是一个很好的方法……你如何考虑为这个目的创建一个基本的EF储存库?
class UnitCompany
{
    private SampleEntity _entity;
    private SampleEntity _prevEntity;

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