Cara terbaik untuk menyegarkan entitas dalam konteks Anda adalah dengan membuang konteks Anda dan membuat yang baru.
Jika Anda benar - benar perlu menyegarkan beberapa entitas dan Anda menggunakan pendekatan Code First dengan kelas DbContext, Anda dapat menggunakan
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Untuk memuat ulang properti navigasi koleksi, Anda dapat menggunakan
public static void ReloadNavigationProperty<TEntity, TElement>(
this DbContext context,
TEntity entity,
Expression<Func<TEntity, ICollection<TElement>>> navigationProperty)
where TEntity : class
where TElement : class
{
context.Entry(entity).Collection<TElement>(navigationProperty).Query();
}
Referensi:
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Reload
context.ReloadNavigationProperty(parent, p => p.Children);
jika Anda memilikiclass Parent { ICollection<Child> Children; }
context.Entry(order).Collection(o => o.NavigationProperty).Query().Load();
sumber
Jika Anda ingin memuat ulang entitas tertentu, dengan DbContextApi, RX_DID_RX sudah memberi Anda jawabannya.
Jika Anda ingin memuat ulang / menyegarkan semua entitas yang Anda muat:
Jika Anda menggunakan Entity Framework 4.1+ (EF5, atau EF 6 mungkin), DbContext API:
Jika Anda menggunakan entityFramework 4 (ObjectContext API):
Nasihat terbaiknya adalah, coba gunakan "konteks berumur pendek" dan Anda akan terhindar dari masalah semacam ini.
Saya menulis beberapa artikel tentang masalah ini:
https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
sumber
Gunakan metode Refresh :
atau sebagai alternatif, buang konteks Anda saat ini dan buat yang baru.
sumber
((IObjectContextAdapter)dbContext).ObjectContext
konteks.Reload () tidak bekerja untuk saya di MVC 4, EF 5 jadi saya melakukan ini.
dan bekerja dengan baik.
sumber
EF 6
Dalam skenario saya, Entity Framework tidak mengambil data yang baru diperbarui. Alasannya mungkin data diperbarui di luar cakupannya. Menyegarkan data setelah mengambil menyelesaikan masalah saya.
sumber
_context.Entry(entity).Reload();
?.Reload()
tidak tersedia di EF6. @CsabaTothMenyegarkan konteks db dengan Reload bukanlah cara yang disarankan karena kinerja menurun. Ini sudah cukup baik dan merupakan praktik terbaik untuk menginisialisasi instance baru dari dbcontext sebelum setiap operasi dijalankan. Ini juga memberi Anda konteks terkini yang disegarkan untuk setiap operasi.
sumber
Aku telah membuat kepalaku sendiri sakit hati karena tidak ada apa-apa! Jawabannya sangat sederhana- Saya baru saja kembali ke dasar ...
tambahkan baris ini di bawah ini setelah Anda memperbarui / menghapus - Anda memuat ulang metode sistem tanpa entitas Anda.
sumber