Sono nuovo in Entity Framework. Ho iniziato con il primo approccio al database che ha creato le mie classi corrispondenti alle tabelle che ho selezionato. Sto usando MVC
. Una delle mie tabelle ha una colonna Date
in essa. Il mio requisito è che voglio visualizzare il giorno nel mio gridview
(Grid MVC), ovvero se la data di quel determinato record è stata trovata il 27/10/2015, quindi il giorno dovrebbe mostrare il martedì. Voglio farlo senza aggiungere una colonna in più per il giorno nel mio database. C'è un modo per questo. Qualsiasi aiuto sarà molto apprezzato.
La mia classe di modello generata è la seguente: -
public partial class QnsNew1
{
public int Id { get; set; }
public Nullable<System.DateTime> Date { get; set; }
public Nullable<int> PersonelID { get; set; }
public string CType { get; set; }
public string Comments { get; set; }
//public string Day { get; set; }//I want to avoid doing this
public virtual Personnel Personnel { get; set; }
public virtual Type Type { get; set; }
}
Anche se questo può essere fatto facilmente con Entity Framework, ma come sottolineato da altre risposte qui, e riconosco al 100%, che è meglio separare i modelli di presentazione / UI dai modelli di database creando ViewModel separato dalle tue entità regolari e metti il tuo calcolato proprietà lì.
Nella modalità Primo database EntityFramework, le classi generate per il modello di database sono classi parziali. Puoi fondamentalmente creare un'altra classe parziale con lo stesso nome, nello stesso assembly e spazio dei nomi e aggiungere la proprietà calcolata lì.
ecco un esempio completo (dopo aver preso in prestito l'implementazione del giorno della settimana dalle risposte qui):
public partial class MyTable
{
[NotMapped]
public string DayOfWeek
{
get
{
if (Date.HasValue)
return DateTime.Now.DayOfWeek.ToString();
else
return null;
}
}
}
È importante assicurarsi che lo spazio dei nomi sia lo stesso della classe generata. Inoltre, dovrai annotare tale proprietà con
NotMapped
attributoNotMapped
modo che EF non tenti di mappare o salvare quella proprietà sul database.
Creare una classe parziale con lo stesso nome e avere una proprietà getter chiamata Day. Questo non aggiungerà una colonna al tuo database.
public partial class QnsNew1
{
public string Day
{
get
{
if (Date.HasValue)
return DateTime.Now.DayOfWeek.ToString();
else
return null;
}
}
}