作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 EF Core 的新手,正在尝试播种枚举。
根据Data Seeding ,此功能是 EF Core 2.1 的新增功能。
我回顾了几个解决方案,包括这个 SO solution by Blake Mumford ,但这对我不起作用,因为枚举不是引用类型。
我的目标(在迁移的帮助下)是将 Category 枚举填充到一个名为 Category 的新 SQL 表中,并让我的 Payment 表包含一个引用 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);
}
}
最佳答案
这就是我所做的,希望它适用于您的环境。
环境
项目框架
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<UserRole>().HasData(EnumFunctions.GetModelsFromEnum<UserRole, UserRoleEnum>());
}
}
public static class EnumFunctions
{
public static IEnumerable<TModel> GetModelsFromEnum<TModel, TEnum>() where TModel : IEnumModel<TModel, TEnum>, new()
{
var enums = new List<TModel>();
foreach (var enumVar in (TEnum[])Enum.GetValues(typeof(TEnum)))
{
enums.Add(new TModel
{
Id = enumVar,
Name = enumVar.ToString()
});
}
return enums;
}
}
public interface IEnumModel<TModel, TModelIdType>
{
TModelIdType Id { get; set; }
string Name { get; set; }
}
[Table("UserRoles")]
public class UserRole : IEnumModel<UserRole, UserRoleEnum>
{
[Key]
public UserRoleEnum Id { get; set; }
public string Name { get; set; }
}
PM> add-migration SeedUserRoleTable
PM> update-database
关于asp.net - 如何在 Entity Framework Core 2.1 中播种枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53620246/
我是一名优秀的程序员,十分优秀!