私はこのようなコードを持っています:
Activity[] GetAllActivities() {
using (ScheduleContext ctx = new ScheduleContext())
return ctx.Activities.AsNoTracking().ToArray();
}
一部のデータの非常に単純なメモリ内キャッシュを作成する目的は、Activities
必要なものすべてを要約したデータベースビューにマップされます。
返されたオブジェクトを省略する AsNoTracking
と、非決定論的に破損します。返されたオブジェクトのプロパティが正しく設定されておらず、1つのオブジェクトのプロパティ値が他のオブジェクトのプロパティに複製されることがよくあります。警告や例外はありません。EF4.3.1でもEF5rc2でもありません。CLR4と4.5リリース候補の両方が同じ動作を示します。
Activity
オブジェクトは非常に単純です。int
基本タイプ( 、など)の非仮想プロパティのみで構成され、string
キーも他のエンティティとの関係もありません。
これは予想される動作ですか?これに関するドキュメントはどこにありますか?
関連するものがなくなると、明らかに変更の追跡が機能しないことは理解していDbContext
ますが、マテリアライズされたプロパティが警告なしに破損していることに驚いています。私は主AsNoTracking
に、より複雑なシナリオのどこかを忘れて、いくぶんもっともらしいが間違った結果が得られるのではないかと心配しています。
編集:エンティティは次のようになります。Jonathan&Kristofに感謝します。IDとして推測される列が実際にあります!
public class Activity
{
public string ActivityHostKey { get; set; }
public int ActivityDuration { get; set; }
public int ActivityLastedChanged { get; set; }
public string ActivityId { get; set; }//!!!
public string ModuleHostKey { get; set; }
public string ModuleName { get; set; }
...