Red de conocimiento informático - Material del sitio web - ¿Cómo actualizar un objeto usando Entity Framework y EntityState.Modified no es por campo?

¿Cómo actualizar un objeto usando Entity Framework y EntityState.Modified no es por campo?

1. Le permite tener una colección de propiedades para excluir: var excluido = nuevo[] { "property1", "property2" };

Con EF5 en NET 4.5, puede hacer esto: var entrada = contexto .Entry(obj);

entry.State = EntityState.Modified;

foreach (nombre var excluido)

{

entrada. En .NET 4.5, permite establecer una propiedad para una nueva función incluso si la propiedad ya estaba configurada para Modificar sin modificación. Cuando utilice .NET 4 en EF 4.3.1 o EF5, puede hacer esto: var entrada = contexto.Entrada(obj);

foreach (nombre de var en entrada.CurrentValues.PropertyNames.Except(excluido))

{

entry.Property(name).IsModified = true;

}

2. Sin embargo, puede marcar una propiedad como modificada: context.Entry(obj).Property(o =gt; o.Property3).IsModified = true;

context.Entry(obj).Property( o = gt; o.Property4).IsModified = true;

// etc.

Tenga en cuenta que una vez que marca el estado de toda la entidad como modificada, no se admite IsModified se establece en falso. Propiedad2;

context.Entry(objInDB).CurrentValues.SetValues(obj);

context.SaveChanges()

3. Gran respuesta, pero espero que alguien pueda proporcionar una.

Este código fue desarrollado para EF 4.3.1 // Debe importar/usar estos espacios de nombres

usando System.Data.Entity;

usando System.Data.Entity.Infrastructure <. /p>

//Actualiza las columnas especificadas del objeto de entidad, separadas por comas

//Este método supone que has abierto/inicializado el contexto

public static void Updatelt; (este contexto DbContext, T entidadObjeto, parámetros cadena[] propiedades) donde T: clase

{

contexto.Setlt ().Attach(entityObject) ;

var entrada = contexto.Entry(entityObject);

foreach(nombre de cadena en propiedades)

entrada .Property(nombre).IsModified = true;

p>

context.SaveChanges();

}

Ejemplo de uso usando (FooEntities context = new FooEntities())

{

FooEntity ef = new FooEntity();

//Por el bien del argumento, supongamos que esta entidad tiene 4 columnas:

// FooID (PK), BarID (FK), nombre, edad. CreadoPor, CreadoEn

//Simular cambios

ef.FooID = 1

ef.Name = "Billy"

ef; .Edad = 85;

context.Updatelt.FooEntitygt; (ef, "Nombre", "Edad"); // Solo quiero actualizar Nombre y Edad

}.