1.495 messaggi dal 27 dicembre 2005
Ben tornato,
che differenza fa usare il tuo codice con questo ?

public void theGrid_UpdateItem(int employeeId){  var employee = _context.Employees.Find(employeeId);    if (employee == null)  {    ModelState.AddModelError("", "Employee non trovato");    return;  }              TryUpdateModel(employee);  if (ModelState.IsValid)  {    _context.SaveChanges();  }}


Credo sia più pulito e corto il tuo vero ?
11.886 messaggi dal 09 febbraio 2002
Contributi
Grazie, speravo in questa domanda :)
Sono entrambi approcci che funzionano ma quello che ho usato io è adatto a pochi casi, nonostante sia più conciso e dimostri come il model binding sia in grado di ricostruire un intero oggetto.

Il mio approccio è consigliabile solo se l'oggetto non ha altre proprietà oltre a quelle che compaiono nel form di modifica.

Se avesse altre proprietà che non vuoi far modificare nel form, come ad esempio la data di creazione di quell'oggetto, allora non va bene perché perderesti quella data al primo risalvataggio.
Il model binder, infatti, non trovando quel campo nel form, assegnerebbe un valore di default alla data e verrebbe sovrascritta al SaveChanges.

Entity Framework in realtà consente di indicare quali proprietà non devono essere toccate dagli aggiornamenti (approccio opt-out), ma devi stare attento ad indicarle tutte altrimenti rischi seriamente di perdere dei dati.
//Indico che la CreationDate non è stata modificata, così che non venga aggiornata
//... ma a fare così, alla lunga, rischi di dimenticare qualche proprietà e di perdere dati
context.Entry(product).Property(p => p.CreationDate).IsModified = false;


L'approccio con TryUpdateModel, invece, dapprima recupera l'oggetto dal database così com'è, e poi sovrascrive solo il valori ottenuti dai campi del form (approccio opt-in). In questo modo vengono preservati senza sforzo tutti i valori di tutte le altre proprietà che hai scelto di non rendere modificabili dal form.

ciao,
Moreno
Modificato da BrightSoul il 14 settembre 2015 23.20 -

Enjoy learning and just keep making
1.495 messaggi dal 27 dicembre 2005
Grazie preciso e utile come sempre :)
2 messaggi dal 01 luglio 2014
Salve, ho provato ad approcciarmi a questo nuovo metodo, ma ho riscontrato dei problemi. Di seguito l'errore:
Il metodo Select deve restituire un elemento "IQueryable<'AsyncProject.Persona'>" o "IEnumerable<'AsyncProject.Persona'>" o "'AsyncProject.Persona'" quando ItemType è impostato su "AsyncProject.Persona".

HTML:
<asp:GridView runat="server" ID="grdItems" ItemType="AsyncProject.Persona" DataKeyNames="Nome" AutoGenerateColumns="false"
SelectMethod="grdItems_GetDataAsync"
OnDataBound="grdItems_DataBound">
<Columns>
<asp:BoundField HeaderText="Nome" DataField="Nome" />
<asp:BoundField HeaderText="Cognome" DataField="Cognome" />
</Columns>
</asp:GridView>

CODE BEHIND C#:
public async Task<IEnumerable<Persona>> grdItems_GetDataAsync()
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync("http://localhost:50676/api/Persona");
string json = (await response.Content.ReadAsStringAsync());
List<Persona> data = JsonConvert.DeserializeObject<List<Persona>>(json);
return data.AsQueryable();
}
}
Modificato da Amerac il 15 ottobre 2015 18.57 -
Modificato da Amerac il 15 ottobre 2015 19.02 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, verifica che la tua applicazione web sia destinata al .NET Framework 4.6.
Dal Solution Explorer, fai tasto destro sulla tua applicazione web e clicca Proprietà. Dalla casella "Framework di destinazione" scegli .NET Framework 4.6.

Enjoy learning and just keep making
2 messaggi dal 01 luglio 2014
Già verificato, ed è 4.6. Più che altro ho scoperto che serve a forza l'entity framework 6 affinchè si possa richiamare il metodo .toListAsync().
Ora l'errore che sto riscontrando, è che quando richiamo toListAsync(), mi dice:
The source IQueryable doesn't implement IDbAsyncEnumerable<AsyncProject.tbNews>. Only sources that implement IDbAsyncEnumerable can be used for Entity Framework asynchronous operations. For more details see http://go.microsoft.com/fwlink/?LinkId=287068.

Nel caso tu sappia qualcosa te ne sarei grato :)
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
puoi postare la riga di codice in cui usi il ToListAsync? Tipicamente si utilizza al termine di una query LINQ su un DbSet<T> di EF6.

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.