ventajas mvc framework first español datos conexion con code c# asp.net-mvc entity-framework dbcontext

c# - mvc - ¿Cómo forzar a Entity Framework a obtener siempre datos actualizados de la base de datos?



mvc entity framework español (5)

Declaro la variable de entidad, sin asignación, como parte de la clase. Esto me permitió disponer de una instancia sin perder la variable para referencia por otros métodos. Acabo de enterarme de esto, así que no tiene mucho tiempo de ejecución debajo del cinturón, pero hasta ahora parece estar funcionando bien.

public partial class frmMyForm { private My_Entities db; public frmMyForm() { InitializeComponent(); } private void SomeControl_Click(object sender, EventArgs e) { db.SaveChanges(); db.Dispose(); db = new My_Entities(); ... More Code using db ... }

Estoy utilizando la biblioteca EntityFramework.Extended para realizar actualizaciones por lotes. El único problema es que EF no realiza un seguimiento de las actualizaciones por lotes realizadas por la biblioteca. Entonces, cuando vuelvo a consultar el DbContext , no devuelve las entidades actualizadas.

Descubrí que el uso del método AsNoTracking() durante la consulta inhabilita el seguimiento y obtiene datos AsNoTracking() de la base de datos. Sin embargo, dado que EF no realiza un seguimiento de las entidades consultadas con AsNoTracking() , no puedo realizar ninguna actualización sobre los datos consultados.

¿Hay alguna manera de obligar a EF a obtener los datos más recientes mientras rastrea los cambios?


Hacer que el código se ejecute en el mismo contexto no generará entidades actualizadas. Solo agregará nuevas entidades creadas en la base de datos entre ejecuciones. La recarga de fuerza EF se puede hacer así:

ObjectQuery _query = Entity.MyEntity; _query.MergeOption = MergeOption.OverwriteChanges; var myEntity = _query.Where(x => x.Id > 0).ToList();


Intenta esto para actualizar una única entidad:

Context.Entry<T>(entity).Reload()

Editar: para obtener datos recientes para una colección de entidades vale la pena tratar de eliminar la instancia de DbContext después de cada solicitud.


Me encontré con esta pregunta mientras buscaba una solución a un problema que estaba teniendo donde las propiedades de navegación no estaban poblando después de actualizar la entidad. Cada vez que intentaba volver a cargar la entidad desde la base de datos, obtenía la entrada de la tienda local, que no rellenaba las propiedades de navegación mediante la carga diferida. En lugar de destruir el contexto y recrear uno, descubrí que esto me permitía obtener datos nuevos con los servidores proxy funcionando:

_db.Entry(entity).State = EntityState.Detached;

La lógica detrás de esto fue: mi actualización adjuntó a la entidad para que rastreara los cambios en ella. Esto lo agrega a la tienda local. A partir de entonces, cualquier intento de recuperar la entidad con proxies funcionales resultaría en que tome la local en lugar de ir a la base de datos y devolver una entidad nueva habilitada para proxy. Intenté la opción de recarga anterior, que refresca el objeto de la base de datos, pero eso no le da el objeto sustitutivo con carga lenta. Intenté hacer una Find(id), Where(t => t.Id = id), First(t => t.Id = id) . Finalmente, verifiqué los estados disponibles que se proporcionaron y vi que había un estado "Independiente". Eureka! Espero que esto ayude a alguien.


Para mí ... Accedo a mi DbContext de esta manera:

_viewModel.Repo.Context

Para obligar a EF a golpear la base de datos, hago esto:

_viewModel.Repo.Context = new NewDispatchContext();

Sobrescribir el DbContext actual con una nueva instancia. Entonces, la próxima vez que uso mis servicios de datos obtienen los datos de la base de datos.