2014-08-27 61 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