¿Cómo actualizo los objetos de Entity Framework sin cambiar todas las instancias de ese objeto?

StackOverflow https://stackoverflow.com/questions/7810989

Pregunta

Tengo este código que utiliza Entity Framework 4.1 para acceder a entidades de base de datos:

    public string Test()
    {
        Navigation nav = db.Navigations.FirstOrDefault();
        List<Navigation> lNav = db.Navigations.ToList();

        foreach (var item in lNav)
        {
            item.Label += " [Edited]";
        }

        return nav.Label;
    }

Cuando ejecuto esto en ASP.NET MVC, devuelve esto:

News [Edited]

Esperaba que volviera:

News

Porque pensé mi foreach solo modificaría el contenido de lNav. En cambio, parece modificar todas las instancias de los objetos de la entidad.

¿Cómo puedo modificar? lNav sin modificar también nav?

¿Fue útil?

Solución

Probar AsNoTracking():

Navigation nav = db.Navigations.AsNoTracking().FirstOrDefault();
List<Navigation> lNav = db.Navigations.AsNoTracking().ToList();

De esta manera, las entidades cargadas no están unidas al contexto y se deben crear dos instancias diferentes para la primera entidad. Mediante el uso AsNoTracking Desactiva el mapeo de identidad entre los valores clave de una entidad y referencias de objetos que es responsable del comportamiento que observó. (Siempre solo puede haber una referencia de entidad con una clave dada en el contexto y EF no crea un nuevo objeto si carga una entidad con la misma clave. En su lugar, devuelve el objeto que ya existe en el contexto).

Tenga en cuenta que no puede usar esto si tiene la intención de actualizar entidades con la ayuda del mecanismo de seguimiento de cambios EFS. AsNoTracking() está diseñado para escenarios de lectura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top