【问题标题】:Create a table corresponding to enum Entity framework创建枚举Entity框架对应的表
【发布时间】:2017-06-12 11:37:12
【问题描述】:

我按照以下答案将枚举插入数据库;

How to create a table corresponding to enum in EF6 Code First?

但我面临一个奇怪的问题。每次我运行应用程序时,它都会额外输入最后一个枚举。例如,假设我有三个枚举选项; 开始,进行中,完成。 现在在第一次运行时,它按预期输入了 3 个值。

但在第二次运行时,数据库中有四行并且 Done 重复了。每次运行都会重复完成。

PS: 我对上面的文章做了一些修改。

  1. 我使用 DatabaseGenerated(DatabaseGeneratedOption.Identity) 而不是 DatabaseGenerated(DatabaseGeneratedOption.None)

  2. 我的表已经在数据库中了

  3. 我正在使用代码优先的方法,只是想重构代码。

我做错了什么还是有其他解决方案可以解决这个问题?

枚举类:

namespace ToDO.Data.Models
{
public class TaskStatus
{
    private TaskStatusTaskStatusEnum @enum)
    {
        Id = (int)@enum;
        Name = @enum.ToString();
        Description = @enum.GetEnumDescription();
    }

    protected TaskStatus() { } //For EF

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required, MaxLength(100)]
    public string Name { get; set; }

    [MaxLength(100)]
    public string Description { get; set; }

    public static implicit operator TaskStatusTaskStatusEnum @enum) => new TaskStatus(@enum);

    public static implicit operator TaskStatusEnumTaskStatus status) => (TaskStatusEnum)status.Id;
}
public enum TaskStatusEnum
{
    [Description("Started")]
    Started,
    [Description("In Progress")]
    InProgress,
    [Description("Done")]
    Done
}

}

在数据库中添加值的EF扩展方法:

public static void SeedEnumValues<T, TEnum>(this IDbSet<T> dbSet, Func<TEnum, T> converter)
        where T : class => Enum.GetValues(typeof(TEnum))
                               .Cast<object>()
                               .Select(value => converter((TEnum)value))
                               .ToList()
                               .ForEach(instance =>  dbSet.AddOrUpdate(instance));

结果:

Database result

谢谢。

【问题讨论】:

    标签: entity-framework enums ef-code-first code-first


    【解决方案1】:

    AddOrUpdate 与主键进行比较。 Enums 从 0 开始。这个不在数据库中,所以重新添加。您可以使用 AddOrUpdate(x=>x.Code.. etc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2016-04-06
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多