Vorrei utilizzare le classi intermedie, ovvero POCO anziché EF.
L'unico vantaggio che vedo utilizzare direttamente entità EF è che è meno codice da scrivere ...
Vantaggi da utilizzare POCO invece:
si espongono solo i dati dell'applicazione in realtà ha bisogno
Sostanzialmente, supponiamo di avere un metodo di business GetUsers
. Se si desidera solo l'elenco degli utenti per popolare una griglia (cioè è necessario il loro ID, cognome, nome, ad esempio), si può solo scrivere qualcosa di simile:
public IEnumerable<SimpleUser> GetUsers()
{
return this.DbContext
.Users
.Select(z => new SimpleUser
{
ID = z.ID,
Name = z.Name,
FirstName = z.FirstName
})
.ToList();
}
E 'chiaro che cosa il vostro metodo di realtà ritorna. Ora immaginate invece, ha restituito una full User
un'entità con tutte le proprietà di navigazione e roba interna che non si desidera esporre (come ad esempio il campo Password
) ...
E 'davvero semplificare il lavoro della persona che consuma la tua servizi
È ancora più evidente per i metodi commerciali Create
. Certamente non si desidera utilizzare un User
un'entità come parametro, sarebbe terribilmente complicato per i consumatori del vostro servizio di sapere cosa proprietà sono in realtà necessari ...
Immaginate la seguente entità:
public class User
{
public long ID { get; set; }
public string Name { get; set; }
public string FirstName { get; set; }
public string Password { get; set; }
public bool IsDeleted { get; set; }
public bool IsActive { get; set; }
public virtual ICollection<Profile> Profiles { get; set; }
public virtual ICollection<UserEvent> Events { get; set; }
}
Quali proprietà sono necessarie per il consumo del metodo void Create(User entity);
?
- ID: Boh, forse è generato forse non è
- Nome/Cognome: ben quelli dovrebbe essere impostato
- Password: è che una password di testo semplice, una versione hash? che cos'è?
- IsDeleted/IsActive: devo attivare personalmente l'utente? È fatto dal metodo commerciale?
- Profili: hum ... come si influisce su un profilo per un utente?
- Eventi: l'inferno è ??
ti costringe a non uso pigro carico
Sì, io odio questa funzione per diverse ragioni. Alcuni di loro sono:
- estremamente difficile da utilizzare in modo efficiente. Ho visto troppe volte codice che produce migliaia di richieste SQL perché gli sviluppatori non sapevano come utilizzare correttamente il caricamento lazy
- estremamente difficile da gestire le eccezioni. Consentendo l'esecuzione delle richieste SQL in qualsiasi momento (ad es. Quando si è pigri carichi), si delega il ruolo di gestione delle eccezioni del database al livello superiore, vale a dire il livello aziendale o anche l'applicazione. Una brutta abitudine.
L'utilizzo di POCO ti costringe a caricare con entusiasmo le tue entità, molto meglio IMO.
Chi automapper
AutoMapper è uno strumento che permette di convertire automagicamente Entità a pocos e vice versa et. Non mi piace neanche. Vedi https://stackoverflow.com/a/32459232/870604
* StackOverflow non deve essere utilizzato per chiedere opinioni * –