あなたはdetach
に文脈から実体を持っている、またはここで.Reload()
実装だ.Reload()
のためにあなた自身の拡張機能を実装します。出典:https://weblogs.asp.net/ricardoperes/implementing-missing-features-in-entity-framework-core
public static TEntity Reload<TEntity>(this DbContext context, TEntity entity) where TEntity : class
{
return context.Entry(entity).Reload();
}
public static TEntity Reload<TEntity>(this EntityEntry<TEntity> entry) where TEntity : class
{
if (entry.State == EntityState.Detached)
{
return entry.Entity;
}
var context = entry.Context;
var entity = entry.Entity;
var keyValues = context.GetEntityKey(entity);
entry.State = EntityState.Detached;
var newEntity = context.Set<TEntity>().Find(keyValues);
var newEntry = context.Entry(newEntity);
foreach (var prop in newEntry.Metadata.GetProperties())
{
prop.GetSetter().SetClrValue(entity,
prop.GetGetter().GetClrValue(newEntity));
}
newEntry.State = EntityState.Detached;
entry.State = EntityState.Unchanged;
return entry.Entity;
}
彼らは同じコンテキストを共有していますか?変更を保存した後、異なるコンテキストは同じ状態を共有する必要があります。 – Fals
@Fals残念ながら、彼らは同じ文脈を共有していません。 – MiDaa
"AsNoTracking"があなたを助けることができるデータを読み取る必要がある場合のみ。 EFコア:https://docs.microsoft.com/en-us/ef/core/querying/trackingこれは詳細情報です。EFキャッシュバスト:http://codethug.com/2016/02/19/Entity-フレームワーク - キャッシュバスト/ –