Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中的自定义值类型_C#_Entity Framework_Enums - Fatal编程技术网

C# 实体框架中的自定义值类型

C# 实体框架中的自定义值类型,c#,entity-framework,enums,C#,Entity Framework,Enums,我想使用一个自定义值类型,在EntityFramework中有详细说明。它们的底层类型是一个枚举,所以我想将整个内容作为int(枚举的基类型)存储在数据库中。自定义值类型用于从映射到枚举值的字典中检索字符串值。当我首先在EF代码中将自定义值类型用作实体的属性时,不会生成数据库列。此外,当使用EF power tools查看模型时,该属性不会显示 以下是我的自定义值类型: public struct AttachmentType { private AttachmentType(Attac

我想使用一个自定义值类型,在EntityFramework中有详细说明。它们的底层类型是一个枚举,所以我想将整个内容作为int(枚举的基类型)存储在数据库中。自定义值类型用于从映射到枚举值的字典中检索字符串值。当我首先在EF代码中将自定义值类型用作实体的属性时,不会生成数据库列。此外,当使用EF power tools查看模型时,该属性不会显示

以下是我的自定义值类型:

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
    }
}
public结构AttachmentType
{
私有AttachmentType(AttachmentTypeCode AttachmentTypeCode)
{
if(代码值.ContainsKey(附件类型代码))
{
_val=附件类型代码;
}
其他的
{
抛出新的InvalidEnumArgumentException(“这不是有效的附件类型代码”);
}
}
公共重写字符串ToString()
{
返回代码值[_val];
}
私人附件类型代码_val;
公共静态隐式运算符AttachmentType(AttachmentTypeCode AttachmentTypeCode)
{
返回新的AttachmentType(attachmentTypeCode);
}
私有静态只读字典代码值=新字典()
{
{AttachmentTypeCode.Email,“电子邮件”},
{AttachmentTypeCode.WordDocument,“Microsoft Word 2007文档”},
{AttachmentTypeCode.PDF,“Adobe PDF文档”},
};
公共枚举附件类型代码
{
电子邮件=1,
WordDocument=2,
PDF=3
}
}

这个问题的答案是通过注释或Fluent API将类视为复杂类型,添加一个带有枚举类型getter的公共属性以访问内部私有属性,并添加一个自定义的代码优先配置,如下所示,以映射刚创建的公共属性(在我的例子中是枚举,EF5支持)将复杂类型转换为数据库字段:

modelBuilder.Types<ClassAttachmentTypeIsUsedIn>()
.Configure(ctc => ctc.Property(cust => cust.AttachmentType.EnumProperty)
.HasColumnName("AttachmentType"));
modelBuilder.Types()
.Configure(ctc=>ctc.Property(cust=>cust.AttachmentType.EnumProperty)
.HasColumnName(“AttachmentType”);
请参阅此处的更多信息: