Utilizo Entity Framework 6 (EF6) y quiero asignar una tabla con una columna de tipo int que solo tiene valores 0 o 1 a una propiedad de tipo bool en mi entidad.
Me gustaría hacerlo sin la necesidad de tener dos propiedades para la misma columna al tener una propiedad que no está asignada usando la propiedad que está asignada en su get'er y set'er de esta manera.
public class MyEntity
{
...
[NotMapped]
public bool MyColumnAsBool
{
get { return MyColumnAsInt == 1; }
set { MyColumnAsInt = value ? 1 : 0; }
}
public int MyColumnAsInt { get; set; }
...
}
Pero lo que no puedo imaginar es si esto se puede hacer solo con atributos como en NHibernate. Y si no, ¿por qué? ¿Por qué no se ha implementado?
Es una molestia tener dos propiedades para la misma cosa cuando ambas deben ser públicas.
No creo que haya una manera de hacerlo mejor, pero puedes hacer algunas cosas para que se vea bien:
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; }
...
}
De esta manera, si navega por la clase a través de intellisense, solo verá la propiedad booleana con el nombre propio, mientras que la propiedad de respaldo está oculta a intellisense y usa el nombre del atributo Column
para obtener la asignación de propiedades en la db.