2014-08-27 31 views
1

我想在實體框架中使用此處詳述的自定義值類型http://vbcity.com/blogs/jatkinson/archive/2010/01/12/create-custom-types-and-initialize-them-without-the-new-keyword-c-vb-net.aspx]1。它們的基礎類型是一個枚舉,所以我想把整個東西存儲在數據庫中,作爲int,enum的基類型。自定義值類型的用途是從映射到枚舉值的字典中檢索字符串值。當我首先使用EF代碼中的自定義值類型作爲實體的屬性時,不會生成數據庫列。此外,在使用EF電動工具查看該屬性未顯示的模型時。實體框架中的自定義值類型

這裏是我的自定義值類型:

public struct AttachmentType 
{ 
    private AttachmentType(AttachmentTypeCode attachmentTypeCode) 
    { 
     if (CodesValues.ContainsKey(attachmentTypeCode)) 
     { 
      _val = attachmentTypeCode; 
     } 
     else 
     { 
      throw new InvalidEnumArgumentException("This is not a valid attachment type code."); 
     } 

    } 

    public override string ToString() 
    { 
     return CodesValues[_val]; 
    } 

    private AttachmentTypeCode _val; 

    public static implicit operator AttachmentType(AttachmentTypeCode attachmentTypeCode) 
    { 
     return new AttachmentType(attachmentTypeCode); 
    } 

    private static readonly Dictionary<AttachmentTypeCode, string> CodesValues = new Dictionary<AttachmentTypeCode, string>() 
    { 
     {AttachmentTypeCode.Email, "Electronic Mail Message"}, 
     {AttachmentTypeCode.WordDocument, "Microsoft Word 2007 Document"}, 
     {AttachmentTypeCode.PDF, "Adobe PDF Document"}, 
    }; 

    public enum AttachmentTypeCode 
    { 
     Email= 1, 
     WordDocument= 2, 
     PDF = 3 
    } 
} 

回答

1

這個問題的答案的問題是治療類爲通過註釋或流暢API的複雜類型,用枚舉類型的訪問的吸氣劑添加的公共屬性內部的私有財產,並添加自定義代碼優先配置類似下面剛創建的公共財產的複雜類型(枚舉,其EF5支持我的情況)映射到數據庫字段:

modelBuilder.Types<ClassAttachmentTypeIsUsedIn>() 
.Configure(ctc => ctc.Property(cust => cust.AttachmentType.EnumProperty) 
.HasColumnName("AttachmentType")); 

在這裏看到更多: http://visualstudiomagazine.com/articles/2014/04/01/making-complex-types-useful.aspx