2010-09-06 17 views
9

Supposons que j'ai les 2 tables SQL suivantes:Comment mapper la table de recherche en enum?

Foo

Column  DataType 
--------------------------- 
Title   NVARCHAR(20) 
Body   NVARCHAR(MAX) 
FooTypeId  TINYINT 

FooType

Column  DataType 
-------------------------- 
FooTypeId  TINYINT 
Name   NVARCHAR(10) 

Maintenant, im en utilisant Entity Framework 4.0 avec un contexte de données personnalisées et la mise en œuvre POCO .

Comment est-ce que je mappe ceci sur le concepteur, et mon POCO?

Dois-je créer une propriété POCO (de type byte je suppose) appelée "FooTypeId", puis j'expose une autre propriété de mon type enum?

Ie.

public class Foo 
{ 
    public byte FooTypeId { get; set; } // for ORM - do i need this?? 
    public FooType FooType // for most querying operations 
    { 
     get 
     { 
      return (FooType)this.FooTypeId; 
     } 
     set 
     { 
      this.FooTypeId = (int)value; 
     } 
    } 
} 

public enum FooType 
{ 
    Blah = 1, 
    Foo = 2, 
    Bar = 3 
} 

En ce moment, je n'ai même pas le FooType tableau sur mon concepteur, que je pensais que je peux essayer de « exprimer » cela comme une énumération de la FooTypeId réelle sur la propriété Foo. Ou suis-je censé créer une "Propriété de navigation" sur le mappeur, puis définir cela dans mon POCO?

J'ai lu des fils de discussion datant de quelques années (EF1) disant "Les Enums ne sont pas supportés par EF", est-ce toujours le cas avec EF4? Si c'est le cas, est ce que je vais bien?

Je suis un peu perdu ici, quelques conseils seraient grandement appréciés!

+0

J'ai utilisé T4 pour cela. http://www.hanselman.com/blog/T4TextTemplateTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx –

Répondre

7

Actuellement, EF4 ne prend pas en charge nativement les énumérations.

Je l'ai vu une grande solution de contournement par AlexJ qui fonctionne assez bien (il est lourd assez de code bien), http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

J'ai aussi entendu dire que ce soutien enum natif vient dans la prochaine version de EF4, mais qui sait exactement quand cela sera publié.

+0

Wow, c'est assez lourd, mais une solution quand même. Merci. – RPM1984

+0

Il sera dans .NET 4.5, voir [data.uservoice] (http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015335-support-for -enums) – abatishchev