2010-12-14 19 views
7

¿Es posible en EF-Primera Código de actualizar sin consultar toda la fila en dB mediante el uso de objetos de código auxiliar, ...entidad Código Marco primera actualización del trozo por Entidad

por ejemplo,

public class Dinner 
{  
    public int DinnerID { get; set; }  
    public string Title { get; set; }  
    public DateTime EventDate { get; set; }  
    public string Address { get; set; }  
    public string Country { get; set; }  
    public string HostedBy { get; set; }  
} 



Dinner dinner = dinner.DinnerID = 1;  
dinner.HostedBy = "NameChanged" 
nerdDinners.SaveChanges(); 

será el código anterior crear una instrucción de actualización que hará que las siguientes columnas nulo para la fila de DinnerID 1?

Título, EVENTDATE, dirección, país

¿Hay alguna manera o método como "PropertyModified" = true, entonces el resto hacerlos = false, por lo que HostedBy es el único que será ¿actualizado?

Respuesta

4

I que que busca ApplyCurrentValues

public void UpdateDinner(Dinner existingDinner) 
{ 
    var stub = new Dinner { DinnerId = existingDinner.DinnerId }; 
    ctx.Dinners.Attach(stub); 
    ctx.ApplyCurrentValues(existingDinner); 
    ctx.SaveChanges(); 
} 

applyCurrentValues ​​ copia los escalares valores del objeto existente en el objeto en el gráfico (en el caso anterior - la entidad de stub).

Desde el Remarks sección en MSDN:

Cualquier valores que difieren de los valores originales del objeto están marcados como modificado.

¿Eso es lo que buscas?

+0

¿Por qué no puedo encontrar 'ApplyCurrentValues ​​()'? método no existe. –

+0

es un método en la clase 'ObjectContext' ... – RPM1984

0

Pruebe esto tal vez, es específico de EF Code First que parece hacerlo de manera diferente a solo EF.

var dinner = context.Dinners.Find(1); 

context.Entry(dinner).Property(d => d.HostedBy).IsModified = true; 

context.SaveChanges(); 

De ADO.NET team blog

"Marcación de una propiedad como fuerzas modificados ni una actualización para el pase a la base de datos de la propiedad cuando SaveChanges se llama incluso si el valor actual de la propiedad es igual a su valor original "

1

Para construir sobre la respuesta de Pablo, el siguiente trabajo cuando se está utilizando el modelo de EF o primera base de datos:

context.ObjectStateManager.GetObjectStateEntry(dinner).SetModifiedProperty("HostedBy"); 
1

Sólo como referencia a mi pregunta original, si se encuentra la respuesta aquí:

Update a single property of a record in Entity Framework Code First

También contiene cómo desactivar temporalmente la validación, muy útil, especialmente si utilizó EF Power Tools para aplicar ingeniería inversa a su base de datos para codificar las primeras clases.

Cuestiones relacionadas