2010-10-19 14 views
18

Sto utilizzando Entity Framework per la prima volta e desidero sapere se quanto segue è possibile: ho generato le mie classi dal DB e ne ho una denominata Category.Aggiunta di una proprietà personalizzata a Entity Framework?

Ovviamente ha tutti i miei campi nella tabella (ID, CategoryName, SortOrder ecc.) Ma voglio sapere se posso aggiungere una proprietà personalizzata che non è nella tabella, ma in realtà è il risultato di una custom metodo.

Desidero aggiungere una nuova proprietà denominata 'CategoryURL' che è fondamentalmente la proprietà 'CategoryName' eseguita attraverso un metodo personalizzato e restituisce una stringa con trattino.

Il mio pensiero iniziale sta ereditando dalla classe di categoria generata e creando qualcosa di simile all'interno?

public string CategoryURL 
{ 
    get{ return MyCustomMethod(this.CategoryName) } 
} 

È questo l'approccio corretto? E 'questo .CategoryName' funzionerà come penso che dovrebbe? Fondamentalmente il risultato finale è quando restituisco un elenco di "Categoria". Voglio che questo faccia parte della classe, così posso usarlo nel mio ciclo foreach.

Spero che questo abbia senso?

risposta

19

si dovrebbe utilizzare una classe partial:

public partial class Category 
{ 
    public string CategoryURL 
    { 
     get{ return MyCustomMethod(this.CategoryName); } 
    } 
} 

In questo modo this.CategoryName funzionerà proprio come previsto.

Questo funziona perché le classi generate dal generatore di codice framework entità generano anche le classi partial. Significa anche che puoi tranquillamente rigenerare le classi dal database senza influenzare le classi parziali che hai definito tu stesso.

+0

eccellenti grazie – leen3o

+0

Questo è intelligente! In un certo senso, è un po 'spettrale perché sembra * troppo * intelligente. Abbiamo qualche motivo per credere che Microsoft potrebbe rompere questo in una futura release di EF? Suppongo che dovrei preoccuparmi troppo di come questa risposta ha quasi quattro anni e ha funzionato per me! –

9

si dovrebbe aggiungere l'attributo [NotMapped] alla proprietà

Problemi correlati