播种 Entity Framework Core 6 + .NET6 不工作
Seeding Entity Framework Core 6 + .NET6 not working
我这样创建了 Entity Framework 上下文
public class ProductContext : DbContext
{
public ProductContext(DbContextOptions<ProductContext> options) : base(options) { }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//
modelBuilder.ApplyConfiguration(new ProductEntityTypeConfiguration());
// seeding
modelBuilder.Entity<Product>().HasData(
new Product() { Id = 1, Name = "cola", Price = new Money(Currency.EUR, 100) },
new Product() { Id = 2, Name = "chips", Price = new Money(Currency.EUR, 150) },
new Product() { Id = 3, Name = "candy", Price = new Money(Currency.EUR, 200) }
);
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseInMemoryDatabase(databaseName: "ProductDatabase");
base.OnConfiguring(optionsBuilder);
}
}
public class ProductEntityTypeConfiguration : IEntityTypeConfiguration<Product>
{
public void Configure(EntityTypeBuilder<Product> builder)
{
builder.ToTable("Product");
builder.HasKey(product => product.Id);
builder.Property(product => product.Name)
.HasColumnName("Name");
builder.Property(product => product.Price)
.HasConversion(
v => JsonConvert.SerializeObject(v, Formatting.Indented),
v => JsonConvert.DeserializeObject<Money>(v));
}
}
我在 Program.cs
中声明了它
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<ProductContext>();
我不明白为什么,但一切都编译和运行没有错误。但是数据库中的数据没有播种。我可以添加记录、删除它们并使用数据库,但似乎未加载初始种子设置。我做错了什么?
在Entity Framework Core中提供了Seeding Data教程,参考Seed Data in Entity Framework Core section,您需要:
Add-Migration
用于创建种子数据迁移。
PM> Add-Migration SeedInitialData
- 运行
Update-Database
命令将新创建的迁移应用到数据库。
PM> Update-Database
我这样创建了 Entity Framework 上下文
public class ProductContext : DbContext
{
public ProductContext(DbContextOptions<ProductContext> options) : base(options) { }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//
modelBuilder.ApplyConfiguration(new ProductEntityTypeConfiguration());
// seeding
modelBuilder.Entity<Product>().HasData(
new Product() { Id = 1, Name = "cola", Price = new Money(Currency.EUR, 100) },
new Product() { Id = 2, Name = "chips", Price = new Money(Currency.EUR, 150) },
new Product() { Id = 3, Name = "candy", Price = new Money(Currency.EUR, 200) }
);
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseInMemoryDatabase(databaseName: "ProductDatabase");
base.OnConfiguring(optionsBuilder);
}
}
public class ProductEntityTypeConfiguration : IEntityTypeConfiguration<Product>
{
public void Configure(EntityTypeBuilder<Product> builder)
{
builder.ToTable("Product");
builder.HasKey(product => product.Id);
builder.Property(product => product.Name)
.HasColumnName("Name");
builder.Property(product => product.Price)
.HasConversion(
v => JsonConvert.SerializeObject(v, Formatting.Indented),
v => JsonConvert.DeserializeObject<Money>(v));
}
}
我在 Program.cs
中声明了它builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<ProductContext>();
我不明白为什么,但一切都编译和运行没有错误。但是数据库中的数据没有播种。我可以添加记录、删除它们并使用数据库,但似乎未加载初始种子设置。我做错了什么?
在Entity Framework Core中提供了Seeding Data教程,参考Seed Data in Entity Framework Core section,您需要:
Add-Migration
用于创建种子数据迁移。
PM> Add-Migration SeedInitialData
- 运行
Update-Database
命令将新创建的迁移应用到数据库。
PM> Update-Database