Sto cercando di capire le basi di Entity Framework e ho una domanda sul metodo Set < su DbContext. Sto usando un primo modello di database per la seguente domanda.Entity Framework: Quando utilizzare Set <>
Diciamo che ho un database ActivityLog che tra le altre cose posso utilizzare per estrarre un messaggio (messaggio NLog, ad esempio). Potrei scrivere del codice per tirare fuori tutti i messaggi come questo:
using (var entities = new ActivityLogEntities())
foreach (var log in entities.AcitivityLogs)
Console.WriteLine(log.Message);
Tuttavia ho potuto anche ottenere la stessa cosa facendo questo:
using (var entities = new ActivityLogEntities())
foreach (var message in entities.Set<ActivityLog>().Select(entity => entity.Message))
Console.WriteLine(message);
La mia domanda è che cosa è la differenza tra queste due affermazioni? Quando è più appropriato usare l'uno sull'altro? O è solo una questione di preferenze personali?
Se non si dispone di una proprietà 'ActivityLogs', non è possibile utilizzare la proprietà' ActivityLogs'. Potrebbe sembrare una risposta inutile, ma ho avuto situazioni in cui avevo bisogno di accedere a 'DbSet' per un tipo che intenzionalmente non aveva una proprietà diretta per le entità di quel tipo. Ma questo non risponde alla domanda su quale usare quando entrambi sono possibili. –
hvd
@hvd è d'accordo ma è piuttosto raro avere tipi non referenziati dal contesto (e non è del tutto banale da fare) –
@LukeMcGregor Considera 'public class Order {public ICollection Lines {get; impostato; }} public class OrderLine {} classe pubblica Context {public IDbSet Orders {get; set privato; }} '. Non è necessario alcun lavoro supplementare per fare in modo che funzioni, e di solito non ha senso accedere a 'OrderLines' senza gli ordini, quindi perché dovrei aggiungere una proprietà' OrderLines' a livello di contesto? –
hvd