Ответ 1
Как указывали другие, вам нужны два свойства, но вам может быть интересно узнать, что вы можете сделать одно из свойств приватным и по-прежнему отображать его в базе данных:
private string isActive { get; set; }
[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public bool IsActive
{
get { return isActive == "Y"; }
set { isActive = value ? "Y" : "N"; }
}
Если вы используете EF6, вы можете использовать пользовательское соглашение в методе OnModelCreating
для сопоставления частного свойства
modelBuilder.Types().Configure(c =>
{
//NB the syntax used here will do this for all entities with a
//private isActive property
var properties = c.ClrType.GetProperties(BindingFlags.NonPublic
| BindingFlags.Instance)
.Where(p => p.Name == "isActive");
foreach (var p in properties)
c.Property(p).HasColumnName("IsActive");
});
Литература:
Сопоставление частных свойств с использованием пользовательских соглашений
Сопоставление частных свойств без пользовательских соглашений (до EF6)
Edit:
Здесь другой способ идентификации частных свойств, которые должны быть сопоставлены с базой данных:
Сначала добавьте атрибут столбца в частное свойство:
[System.ComponentModel.DataAnnotations.Schema.Column]
private string isActive { get; set; }
Затем используйте присутствие этого атрибута для идентификации частных свойств в вашем методе OnModelCreating
:
modelBuilder.Types().Configure(c =>
{
var properties = c.ClrType
.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance)
.Where(propInfo =>
propInfo.GetCustomAttributes(typeof(ColumnAttribute), true).Length > 0);
foreach (var p in properties)
c.Property(p).HasColumnName(p.Name);
});
Ссылка: Сопоставление частного свойства с инфраструктурой сущности