As pessoas podem argumentar que isso é mais adequado como um comentário, mas, basicamente, é muito tempo para isso.
E:
Você terá que me ajudar um pouco, já que não tenho um sistema funcionando, então estou fazendo isso do topo da minha cabeça. (e estou com um pouco de pressa)
Primeiro, comece com uma propriedade não mapeada:
[NotMapped]
public DateTime ExpiryDate { get; set; }
Esta propriedade não está mapeada. Pode levar a alguns erros em relação ao banco de dados não corresponder ao modelo, mas podemos superar isso. Esta propriedade não será preenchida automaticamente ao consultar os dados. Então, precisamos de uma maneira de lidar com isso nós mesmos.
Por exemplo, (que é um mau exemplo porque precisamos do contexto na entidade em algum lugar ):
[NotMapped]
public DateTime? ExpiryDate
{
get
{
//of course you'll need some caching here
var s = context.Database.SqlQuery<string>("query to select datetime as string");
//additional logic to determine validity:
if (s == "0000-00-00")
return null;
//else:
//do the conversion
}
}
A questão básica aqui; até onde você quer ir para dar suporte a isso dentro da estrutura do EF? Você só precisa lê-lo, ou escrever também, usando o rastreador de alterações do EF etc.?
Existem outras possibilidades, por exemplo, para realizar um CAST para nvarchar dentro do próprio SQL para obter os dados e processá-los posteriormente.
Talvez o
ModelBuilder
expõe algumas opções adicionais.