Я выполнил следующий ответ, чтобы вставить перечисления в базу данных;Создать таблицу, соответствующую enum Entity framework
How to create a table corresponding to enum in EF6 Code First?
Но я столкнулся один странный вопрос. Каждый раз, когда я запускаю приложение, он также вводит последнее перечисление. Например, предположим, что у меня есть три варианта перечисления; Начато, Выполняется, Выполнено. теперь в первом запуске он вводит 3 значения, как ожидалось.
, но при втором запуске в базе данных четыре строки и Done дублируется. Выполняется дублирование при каждом прогоне.
PS: Я сделал некоторые изменения из выше статьи.
Я использовал DatabaseGenerated (DatabaseGeneratedOption.Identity) вместо DatabaseGenerated (DatabaseGeneratedOption.None)
Моя таблица уже есть в базе данных
Я использую код-первый подход и просто хотел пересчет кода.
Я делаю что-то неправильно или есть какое-либо другое решение для решения этой проблемы?
Enum Класс:
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 Extenstion для добавления значений в базе данных:
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));
Результат:
Спасибо.