2011-09-20 5 views
2

Nous utilisons le cadre de première entité de code de Miscrosoft (4.1) pour mapper vers une base de données existante. Nous voulons être en mesure de changer les types de données et les valeurs de certaines propriétés qui correspondent à un avec une table. Par exemple, il existe une colonne sur la table qui détermine si un enregistrement est en cours. C'est une colonne entière, et a des valeurs 1 ou 2. Nous ne voulons pas changer la base de données car il y a beaucoup d'applications différentes qui récupèrent des données de cette colonne, mais ce serait sympa pour notre code d'avoir cette classe table a une propriété booléenne IsActive, qui renvoie true si la colonne de la table est 1 et false dans le cas contraire. Existe-t-il un moyen de configurer le travail EnityFrame afin que nous puissions définir ce mappage directement sans avoir deux propriétés sur la classe réelle, une pour la colonne entière (mappée à la base de données) et une propriété booléenne calculée à partir de l'autre? Puis-je mapper la propriété booléenne directement à la colonne entière?Code First Entity Framework

Répondre

1

La réponse simple est non. EF est totalement stupide dans ce domaine et il manque complètement le mapping de type simple. Cela signifie que vous ne pouvez pas modifier le type de propriétés scalaires et que votre classe doit en effet travailler avec cette propriété int en utilisant les valeurs 1 et 2 pour définir votre IsActive.

La solution peut être:

public class YourClass 
{ 
    public int IsActiveValue { get; set; } 
    [NotMapped] 
    public bool IsActive 
    { 
     get { return IsActiveValue == 2; } 
     set { IsActiveValue = value ? 2 : 1; } 
    } 
} 

Cette solution présente quelques inconvénients

  • Vous devez avoir deux propriétés et IsActvieValue doivent être visibles au contexte
  • Vous ne pouvez pas utiliser IsActive dans LINQ to -entités requêtes
Questions connexes