何もありませんDetach(object entity)
でDbContext
。
最初にEFコードのオブジェクトをデタッチする機能はありますか?
何もありませんDetach(object entity)
でDbContext
。
最初にEFコードのオブジェクトをデタッチする機能はありますか?
回答:
既存のオブジェクトを切り離したい場合は、@ Slaumaのアドバイスに従ってください。変更を追跡せずにオブジェクトをロードする場合は、以下を使用します。
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
コメントで述べたように、これはエンティティを完全に切り離しません。それらはまだ接続されており、遅延読み込みは機能しますが、エンティティは追跡されません。これは、エンティティをロードしてデータを読み取るだけで、それらを変更する予定がない場合などに使用します。
これはオプションです:
dbContext.Entry(entity).State = EntityState.Detached;
entity
ませんが、モデルクラス(Person、Customer、Orderなど)の一部である型の実体化されたオブジェクトである必要があります。IQueryable <T>をに直接渡すことはできませんdbContext.Entry(...)
。それがあなたが意図した質問ですか?
Detached
ます。エンティティをコンテキストにアタッチせずに(変更追跡なしで)DBからエンティティをロードする場合は、を使用しますAsNoTracking
。
Detached
。
using(ctx){ return ctx....ToList(); }
。このような場合AsNoTracking()
、オブジェクトコンテキストを不必要に埋める手間を省くことができるので、使用することには意味があります。特に大きなリストの場合、おそらくパフォーマンスとメモリ消費のメリットがあると思いますよね?