1

たとえば、別のエンティティへの外部キーを持つエンティティがあります。

public entityA
{
   ....
        [ForeignKey("State")]
        public virtual int StateId { get; set; }
        public virtual States State { get; set; }
   ....
}

IDbSet<entityA> EntitiesA;

StateId は、デフォルトで 10 に初期化されています。

コンテキストをデータベースに初期化し、常に同じものを使用します。using 句で初期化したら、EntitiesA コレクション (StateId を 20 に設定) のいくつかのエンティティにいくつかの変更を加えますが、この時点では必要ないため、context.SaveChanges() を使用してデータベースに変更をコミットしません。

いくつかのエンティティを変更した後、アプリで次のことを行うポイントに到達しました。

IQueryable<EntityA> entities = 
                context.EntitiesA.Where(e => e.StateId == 10);
foreach (EntityA _currentEntity in entities)
{
  ....
}

この時点で、データベースへの savechanges を実行していないため、データベース内のエンティティの状態は引き続き 10 (変更された 20 ではありません) であるため、条件 e.StateId == 10 は満たされますが、エンティティには StateId が 20 であるアイテムが含まれているので、これはわかりません....

望ましい動作は、条件 e.StateId が、以前に 20 に変更されたものと、stateid がまだ 10 (変更されていない) のアイテムのみを含むエンティティに対して満たされないことです。

何か案は?データベースに対してクエリが起動され、実際には結果がメモリから取得されているようです...

4

1 に答える 1