2017-07-12 7 views
0

カウントエンティティコレクションのプロパティはカウントされますが、コレクションに多数のアイテムがある場合でも常に0が返されます。EF ChangeTrackerエンティティのコレクションは、私はこのようにそれを処理しようとしているすべてのエンティティの削除のためのいくつかのアクションを実行するためには、常に0

((SampleEntity)deletedEntity.Entity).SuperCollection.Count(); 

私のコレクションは0で、この時点では常にある理由の任意のアイデア?

私のモデルは適切に遅延ローディング、以下のようにコーディングされていると、私のコレクションはSaveChangesを()

public partial class SampleEntity 
{ 
    public int MyId { get; set; } 
    public string Description { get; set; } 

    public SampleEntity() 
    { 
     this.SuperCollection = new HashSet<UnitCompany>(); 
    } 

    public virtual ICollection<AnyOtherEntity> SuperCollection { get; set; } 
} 

敬具

答えて

0

コールDetectChanges前の外に非常にうまく機能:

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

_prevEntityは、関連するオブジェクトへのリンクを保持し、私は同じ問題を持って()DetectChangesを呼び出すSaveChanges

+0

でそれを得ることができます:あなたは、この関係を保存する必要がある場合は、ローカルフィールドに保存することができます。実際、ChangeTrackerは期待どおりに変更を追跡しています。私のコードのデバッグ私のエンティティは、 'public override int SaveChanges(){}'に入る前に、 'db.SampleEntity.Remove(db.SampleEntity.Find(1234)'の実行直後にすべてのコレクションのプロパティリレーションカウントが失われていることに気付きました。 –

+0

@RubensMussiCuryこれはEFの仕組みです。エンティティを削除すると、子/親エンティティとの関係がすべて削除されます – Backs

+0

削除/削除を設定したときにこれらの関係を維持するための提案がありますか?エンティティ? –

関連する問題