2010-09-06 32 views
9

Giả sử tôi có 2 bảng SQL sau:Cách bản đồ tra cứu bảng để enum?

Foo

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

FooType

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

Bây giờ, im sử dụng Entity Framework 4.0 với một bối cảnh dữ liệu tùy chỉnh và thực hiện POCO .

Làm cách nào để tôi lập bản đồ này trên nhà thiết kế và POCO của tôi?

Tôi có phải tạo thuộc tính POCO (loại byte tôi giả định) được gọi là "FooTypeId", sau đó tôi hiển thị thuộc tính KHÁC của loại enum của tôi không?

Tức là.

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 
} 

Tại thời điểm này, tôi thậm chí không có FooType bảng trên thiết kế của tôi, như tôi đã tìm tôi có thể thử và "bày tỏ" này như một điều tra từ FooTypeId thực tế trên tài sản Foo. Hoặc tôi có nên tạo một "Thuộc tính điều hướng" trên trình ánh xạ, sau đó xác định rằng trong POCO của tôi không?

Tôi đã đọc chủ đề từ một vài năm trước (EF1) nói rằng "Enums không được hỗ trợ trong EF", đây vẫn là trường hợp với EF4? Nếu nó là, là những gì im làm đúng?

Tôi bị lạc ở đây, một số hướng dẫn sẽ được đánh giá cao!

+0

Tôi đã sử dụng T4 để thực hiện việc này. http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx –

Trả lời

7

Hiện tại, EF4 không hỗ trợ bản thân enums.

Tôi đã nhìn thấy một workaround lớn bởi AlexJ rằng hoạt động khá tốt (nó khá nặng đang mặc dù), http://blogs.msdn.com/b/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

Tôi cũng nghe nói rằng sự ủng hộ enum bản địa này đang đến trong phiên bản tiếp theo của EF4, nhưng ai biết chính xác khi nào sẽ được phát hành.

+0

Chà, đó là khá mã nặng, nhưng một giải pháp dù sao đi nữa. Cảm ơn. – RPM1984

+0

Nó sẽ trong .NET 4.5, xem [data.uservoice] (http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015335-support-for -enums) – abatishchev

Các vấn đề liên quan