Entity Framework 4.1 を使用しているプロジェクトがあります。モデルは、SQL Server 2008 R2 マシン上のデータベースからモデル化されています。
3 つの nvarchar 列、2 つの bitcolumns、および 1 つの datetime 列を持つテーブルがあります。
アプリケーションは、リポジトリ パターンと依存性注入を使用しています。Hierarchical に設定されているコンテキストを除いて、DI コンテナ内のすべての項目が Transient に設定されています。
これで、エンティティ フレームワークのモデルに対してラムダ クエリを実行すると、期待どおりにデータが取得されます。例えば:
var someData = _dataRepository.Get(data => data.Name == name && data.IsEnabled);
基本的に、リポジトリの Get メソッドは .Where(filter) linq 式のラッパーです。
だから問題はこれです:
データベースを (SMS 経由または .SaveChanges を使用したコード内で) データベースの bit 列または datetime 列に更新し、データを再クエリすると、返されたクエリ データが期待どおりに返されます。ただし、nvarchar 列の 1 つで (SMS/.SaveChanges) を更新して再クエリを実行すると、更新されたデータではなく、nvarchar が以前のクエリから格納するために使用する「古い」データが返されます。
Entity Framework には、これが発生する原因となる継承キャッシュがありますか?