Domanda

E 'possibile in EF Codice-primo a aggiornamento senza interrogare l'intera riga in dB utilizzando oggetti stub, ...

per es.

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();

sarà il codice sopra creare un'istruzione di aggiornamento che renderà i seguenti colonne NULL per la fila di DinnerID 1?

  

Titolo, EventDate, indirizzo, paese

C'è un modo o metodo come "PropertyModified" = true, poi il resto renderli = false, in modo che HostedBy è l'unico che verrà aggiornato?

È stato utile?

Soluzione

I pensare si sono alla ricerca di href="http://msdn.microsoft.com/en-us/library/dd487246.aspx" applyCurrentValues ??

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

applyCurrentValues ?? copia il scalare valori dall'oggetto esistente all'oggetto nel grafico (nel caso sopra - l'entità stub).

Dal Note su MSDN:

  

I valori che differiscono dai valori originali dell'oggetto sono contrassegnati come modificato.

E 'questo che la tua dopo?

Altri suggerimenti

Per costruire sulla risposta di Paolo, il seguente funziona quando si utilizza EF modello o database Primo:

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

Solo per riferimento alla mia domanda iniziale, se trovato qui la risposta:

aggiornare una singola proprietà di un record in codice Entity Framework primo

Esso contiene inoltre come la convalida disattivare temporaneamente -. Molto utile soprattutto se si è utilizzato EF Power Tools per decodificare il codice DB prime classi

Penso che si sta cercando il attach () metodo.

Prova questo forse, è specifico per EF Codice Prima che sembra farlo in modo diverso che solo EF.

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

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

context.SaveChanges();

Da ADO.NET team blog

"Marcatura una proprietà come le forze modificati un aggiornamento da inviare al database per la proprietà quando SaveChanges viene chiamato anche se il valore corrente della proprietà è la stessa come il suo valore originale."

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top