2010-09-06 71 views
9

假设我有以下2个SQL表:如何将查找表映射为枚举?

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

FooType

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

现在,即时通讯使用的实体框架4.0自定义数据上下文和POCO实现。

我如何在设计师和我的POCO上映射这个?

我必须创建一个名为“FooTypeId”的POCO属性(类型为字节我假设),然后我公开我的枚举类型的另一个属性?

即,

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 
} 

在那一刻,我甚至不具备FooType表上我的设计师,因为我想我可以尝试和“表达”这是来自于foo财产的实际FooTypeId枚举。 或者我应该在mapper上创建一个“Navigational Property”,然后在我的POCO中定义它?

我读过几年前的线程(EF1)说“EF中不支持枚举”,EF4的情况仍然如此吗?如果是这样,我在做什么正确的?

我有点迷失在这里,一些指导将不胜感激!

+0

我用T4来做到这一点。 http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx – 2011-11-28 08:15:48

回答

7

目前,EF4本身不支持枚举。

我见过AlexJ很大的变通方法,工作得很好(这是很沉重的代码虽然),http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

我也听说过,这个原生支持ENUM在EF4下一版本的到来,但谁知道到底什么时候会被释放。

+0

哇,这是相当密码,但仍然是一个解决方案。谢谢。 – RPM1984 2010-09-06 04:52:09

+0

它将在.NET 4.5中看到[data.uservoice](http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015335-support-for -enums) – abatishchev 2011-11-28 08:22:16