2010-09-06 4 views
9

Supongamos que tengo los siguientes 2 tablas SQL:¿Cómo asignar la tabla de búsqueda a enum?

Foo

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

FooType

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

Ahora, im utilizando Entity Framework 4.0 con un contexto de datos personalizados e implementación POCO .

¿Cómo puedo asignar esto al diseñador y a mi POCO?

¿Tengo que crear una propiedad POCO (de tipo byte asumo) llamada "FooTypeId", entonces expongo OTRA propiedad de mi tipo de enumeración?

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 
} 

Por el momento, no tienen incluso la FooType tabla en mi diseñador, ya que pensé que puedo tratar de "expresar" esto como una enumeración de la FooTypeId real en la propiedad de Foo. ¿O se supone que debo crear una "Propiedad de navegación" en el mapeador, y luego definir eso en mi POCO?

He leído hilos de unos años atrás (EF1) que dicen "Los enumerados no son compatibles con EF", ¿sigue siendo así con EF4? Si lo es, ¿qué estoy haciendo bien?

¡Estoy un poco perdido aquí, una guía sería muy apreciada!

+0

He usado T4 para hacer esto. http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx –

Respuesta

7

Actualmente, EF4 no admite enums nativamente.

He visto una gran solución por AlexJ que funciona bastante bien (que es bastante pesada código sin embargo), http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

También he oído que este apoyo enumeración nativa viene en la próxima versión de EF4, pero quién sabe exactamente cuándo se lanzará eso.

+0

Wow, eso es bastante pesado, pero una solución, no obstante. Gracias. – RPM1984

+0

Aparecerá en .NET 4.5, consulte [data.uservoice] (http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015335-support-for -enums) – abatishchev

Cuestiones relacionadas