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;
}
}
}