Utilizzo Entity Framework 6 (EF6) e voglio mappare una tabella con una colonna di tipo int che ha solo valori 0 o 1 in una proprietà di tipo bool sulla mia entità.
Mi piacerebbe farlo senza la necessità di avere due proprietà per la stessa colonna avendo una proprietà che non è mappata usando la proprietà che è mappata nel suo get'er e set'er in questo modo.
public class MyEntity
{
...
[NotMapped]
public bool MyColumnAsBool
{
get { return MyColumnAsInt == 1; }
set { MyColumnAsInt = value ? 1 : 0; }
}
public int MyColumnAsInt { get; set; }
...
}
Ma quello che non riesco a capire è se questo può essere fatto con Attributi da solo come in NHibernate? e se no, perché? Perché non è stato implementato?
È una seccatura avere due proprietà per la stessa cosa quando entrambe devono essere pubbliche.
Non penso che ci sia un modo per farlo meglio, ma puoi fare alcune cose per farlo sembrare a posto:
public class MyEntity
{
...
[NotMapped]
public bool MyColumn
{
get { return MyColumnAsInt == 1; }
set { MyColumnAsInt = value ? 1 : 0; }
}
[Column("MyColumn")]
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public int MyColumnAsInt { get; set; }
...
}
In questo modo, se si esplora la classe tramite intellisense, si vedrà solo la proprietà booleana con il nome corretto, mentre la proprietà di supporto è nascosta da intellisense e utilizza il nome dall'attributo Column
per ottenere la mappatura delle proprietà nel db.