Как заполнить перечисление в Entity Framework Core 2.1 - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок в EF Core и пытаюсь посеять перечисление.

Согласно Data Seeding эта функция является новой для EF Core 2.1.

Я рассмотрел несколько решений, в том числе это решение SO от Blake Mumford ,но это не работает для меня, так как enum не является ссылочным типом.

Моя цель (с помощью миграций) состоит в том, чтобы перечислить Category в новой таблице SQL с именем Category, имоя таблица платежей должна содержать столбец, который ссылается на таблицу категорий как внешний ключ.

Любая помощь будет принята с благодарностью.Спасибо.

public partial class Payment
{
    public int PaymentId { get; set; }
    public DateTime PostedDate { get; set; }
    public string Vendor { get; set; }
    public decimal Amount { get; set; }

    public virtual Category Category { get; set; }
}

public enum Category
{
    Restaurants,
    Groceries,
    [Display(Name = "Home Goods")]
    HomeGoods,
    Entertainment
}

public partial class MyDbContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Error: The type Category must be a reference type in order to use it as parameter TEntity in the 
        // genric type or method ModelBuilder.Entity<TEntity>()

        modelBuilder.Entity<Category>().HasData(Category.Restaurants, 
                                                Category.Groceries, 
                                                Category.HomeGoods, 
                                                Category.Entertainment);
    }
}

1 Ответ

0 голосов
/ 04 декабря 2018

Нельзя заполнить значения для типа перечисления в базе данных, потому что перечисления не являются типами сущностей и, следовательно, не попадают в базу данных в первую очередь.Другими словами, таблицы Categories не будет, поэтому нет смысла вставлять значения в эту несуществующую таблицу.

Если вы хотите, чтобы ваши категории сохранялись в вашей базе данных, тогда вынужно создать класс вроде:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...