2010-06-17 7 views
2

J'ai donc un petit problème avec la conversion d'une chaîne en une valeur booléenne lorsque EF correspond à mon POCO. J'ai créé des POCO personnalisés et j'en ai un qui a une propriété booléenne appelée "IsActive". Mais, dans la base de données, la colonne de tables "IsActive", qui correspond à la propriété POCOs, est une chaîne. C'est soit 'Y' ou 'N'.Mappage de POCO personnalisé dans Entity Framework 4

EF n'aime pas ça, donc je me demande s'il existe un moyen de lui dire de convertir la chaîne en booléen via une méthode personnalisée? Merci!

Répondre

1

Je ne l'ai pas testé par moi-même. http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

Créez une définition de type complexe dans votre edmx.

<ComplexType Name="IsActiveWrapper" > 
      <Property Type="string" Name="Value" Nullable="false" /> 
</ComplexType> 

Créer un type complexe

public class IsActiveWrapper 
{ 
    private bool isActive; 

    public string Value 
    { 
     get 
     { 
      return isActive ? "Y" : "N"; 
     } 

     set 
     { 
      isActive = "Y".Equals(value); 
     } 
    } 

    public bool IsActive 
    { 
     get { return isActive; } 
     set { isActive = value; } 
    } 

    public static implicit operator IsActiveWrapper(bool isActive) 
    { 
     return new IsActiveWrapper { IsActive = isActive }; 
    } 

    public static implicit operator bool(IsActiveWrapper wrap) 
    { 
     if (wrap == null) return false; 
     return wrap.IsActive; 
    } 
} 

Maintenant, vous pouvez faire quelque chose comme ça

public class TestIsActive 
{ 
    public virtual IsActiveWrapper IsActive { get; set; } 
} 
var test = new TestIsActive { IsActive = true }; 
+0

Le problème avec cette solution est qu'il ne joue pas bien avec les requêtes LINQ .. –

+0

Oublier pour le signaler ... Merci à @Roger Alsing Dans les requêtes, vous devez écrire quelque chose comme ça var query = à partir du test dans ctx.TestIsActive où test.IsActive.Value == "Y" sélectionnez test; –

+0

Donc, je ne serais pas en mesure de définir ma propriété Entity à Boolean? Cela peut être un problème .... J'ai pensé à créer une propriété tempIsActive dans mon entité qui mappe à la chaîne db et ensuite avoir ma propriété IsActive Entity obtenir la valeur de la propriété tempIsActive et le convertir en un booléen. Mais, je viens d'attacher mon entité à ma base de données ... –

Questions connexes