首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Entity Framework中的字符串列映射到Enum

将Entity Framework中的字符串列映射到Enum
EN

Stack Overflow用户
提问于 2011-09-16 06:03:49
回答 8查看 26.1K关注 0票数 24

有没有办法将字符串列映射到实体模型中的枚举?

我在Hibernate中做到了这一点,但在EMF中搞不懂。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-09-16 06:21:40

它很难看,但为了将枚举映射到字符串,我发现了如下内容:

代码语言:javascript
复制
public virtual string StatusString
{
    get { return Status.ToString(); }
    set { OrderStatus newValue; 
          if (Enum.TryParse(value, out newValue))
          { Status = newValue; }
        }
}

public virtual OrderStatus Status { get; set; } 

OrderStatus是枚举器类型,Status是枚举器,StatusString是枚举器的字符串版本。

票数 15
EN

Stack Overflow用户

发布于 2014-07-25 01:09:36

可能是一个更好的版本。

OrderStateIdentifier字段同时用于JSON序列化和数据库字段,而OrderState仅用于代码中以方便使用。

代码语言:javascript
复制
    public string OrderStateIdentifier
    {
        get { return OrderState.ToString(); }
        set { OrderState = value.ToEnum<OrderState>(); }
    }

    [NotMapped]
    [JsonIgnore]
    public OrderState OrderState { get; set; }


public static class EnumHelper
{
    /// <summary>
    /// Converts string to enum value (opposite to Enum.ToString()).
    /// </summary>
    /// <typeparam name="T">Type of the enum to convert the string into.</typeparam>
    /// <param name="s">string to convert to enum value.</param>
    public static T ToEnum<T>(this string s) where T: struct
    {
        T newValue;
        return Enum.TryParse(s, out newValue) ? newValue : default(T);
    }
}
票数 22
EN

Stack Overflow用户

发布于 2019-06-26 20:04:08

您可以执行以下任一操作:

将类中的Enum属性修饰为文本列

代码语言:javascript
复制
[Column(TypeName = "nvarchar(50)")]
public FileTypes FileType { get; set; }

在您的DatabaseContext类中,覆盖OnModelCreating并添加:

代码语言:javascript
复制
modelBuilder
  .Entity<File>()
  .Property(e => e.FileType)
  .HasConversion(new EnumToStringConverter<FileTypes>());
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7437952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档