1

Entity Frameworkからエンティティをロードし、参照をどこかに保存する場合。エンティティフレームワークは、オブジェクトが破棄されるまでオブジェクトのトレースを保持しますか?オブジェクトの状態をいつでも保存できますか?(どのように追跡しますか)Webアプリケーションではなくアプリケーションについて話します。

4

3 に答える 3

1

.AsNoTracking を使用する場合、エンティティはコンテキストから外れており、単なるオブジェクトになり、永続化または変更を行うことができないことを忘れないでください。

于 2013-11-18T03:18:59.937 に答える
1

エンティティをロードすると、ObjectContext が破棄されるまで ObjectStateManager で追跡されます。ただし、トラッキングなしでロードできます-DbContext(またはより正確にはDbSet)を使用.AsNoTrackingして、クエリで使用できます

于 2013-03-22T20:28:44.933 に答える
0

データベース コンテキストが存在する限り、エンティティは追跡されます。これは、手動でデタッチしないことを前提としています。

考慮してください(フリーハンド/疑似):

MyEntity entity;

using (var context = new MyDbContext())
{
    entity = context.MyEntities.First();
}

entity.Property1 = "something"; // success
entity.LazyNavigationProperty.Property2 = "something"; // fail

コンテキストとそれとの接続を破棄したため、遅延読み込みは失敗します。

一方、次のことを考慮してください。

var context = new MyDbContext())
MyEntity entity = context.MyEntities.First();

entity.Property1 = "something"; // success

// do loads of stuff

entity.LazyNavigationProperty.Property2 = "something"; // success

context.SaveChanges();

コンテキストはまだ開いているため、エンティティはオンデマンドで追跡および永続化されます。

于 2013-03-22T20:26:49.047 に答える