【问题标题】:Custom Value Types in Entity Framework实体框架中的自定义值类型
【发布时间】:2014-08-27 20:08:43
【问题描述】:

我想在实体框架中使用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 存储在数据库中,即枚举的基本类型。自定义值类型的目的是从映射到枚举值的字典中检索字符串值。当我首先在 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
    }
}

【问题讨论】:

    标签: c# entity-framework enums


    【解决方案1】:

    这个问题的答案是通过注解或 Fluent API 将类视为复杂类型,添加带有 enum 类型的 getter 的公共属性以访问内部私有属性,并添加自定义代码优先配置,例如下面将刚刚创建的复杂类型的公共属性(在我的例子中是一个 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 2010-09-07
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多