65.9K
CodeProject 正在变化。 阅读更多。
Home

DbEnum

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2017 年 5 月 10 日

MIT
viewsIcon

7520

这是与 EntityFrameworkCore 种子数据文章一起使用的 DbEnum。

引言

DbEnum 只是一个可以构建枚举的类,最终将其种子数据写入数据库。 不幸的是,我找不到更好的方法,只能从 struct 派生 TEnum。 如果还有更好的方法,请告诉我。

我几年前发现了一个类似的结构,但它随着时间的推移而演变,以至于其内部工作方式不再反映原始文章。

这用于 EntityFrameworkCore 种子数据:https://codeproject.org.cn/Articles/1186323/EntityFrameworkCore-Seeding-Component

public interface IDbEnum
{
    int Id { get; set; }
}

public class DbEnum<TEnum> : IDbEnum where TEnum : struct
{
    private Enum _;
    private string _display;

    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id
    {
        get { return Convert.ToInt32(_); }
        set { _internalSet((Enum)Enum.ToObject(typeof(TEnum), value)); }
    }

    public string Description
    {
        get { return _.ToString(); }
        set { _internalSet((Enum)Enum.Parse(typeof(TEnum), value)); }
    }

    public string Display
    {
        get { return _display = (!string.IsNullOrEmpty(_display) ? _display : _.GetDisplayString()); }
        set { _display = value; }
    }

    private void _internalSet(Enum value)
    {
        if (!_.Equals(value))
        {
            _ = value;
        }
    }

    public DbEnum()
    {
        _ = (Enum)Enum.Parse(typeof(TEnum), default(TEnum).ToString());
    }

    protected DbEnum(Enum value)
    {
        _ = value;
    }

    public TEnum ToEnum()
    {
        return (TEnum)Convert.ChangeType(_, typeof(TEnum));
    }

    public static implicit operator DbEnum<TEnum>(Enum value)
    {
        return new DbEnum<TEnum>(value);
    }

    public static implicit operator TEnum(DbEnum<TEnum> value)
    {
        return value.ToEnum();
    }
}

EnumHelper @ https://codeproject.org.cn/Reference/1186338/EnumHelper-for-DbEnum

© . All rights reserved.