DbEnum





0/5 (0投票)
这是与 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