我是Ef Core的新手。尝试在迁移更新时播种数据。
他就是这样做的
首先创建了一个初始化类:
using AcademicNet.Data.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AcademicNet.Data
{
public class PersonInitializer
{
private AcademicPortalContext _context;
public PersonInitializer(AcademicPortalContext context)
{
_context = context;
}
public async Task Seed()
{
if(!_context.PersonCategoryStatuses.Any())
{
_context.AddRange(_personCategoryStatus);
await _context.SaveChangesAsync();
}
if (!_context.PersonCategories.Any())
{
_context.AddRange(_personCategory);
await _context.SaveChangesAsync();
}
if (!_context.People.Any())
{
_context.AddRange(_people);
await _context.SaveChangesAsync();
}
}
List<PersonCategory> _personCategory = new List<PersonCategory>
{
new PersonCategory()
{
Name = "Internal Person Category",
Description = "Silahkan diganti redaksi ini",
PersonCategoryStatusId = 2,
StartDate = DateTime.UtcNow,
ModifiedDate = DateTime.UtcNow
}
};
List<Person> _people = new List<Person>
{
new Person()
{
FirstName = "Jannen",
LastName = "Siahaan",
Email = "j.siahaan@any.com",
DateAdd = DateTime.UtcNow,
ModifiedDate = DateTime.UtcNow
}
};
List<PersonCategoryStatus> _personCategoryStatus = new List<PersonCategoryStatus>
{
new PersonCategoryStatus()
{
Status = "Baru"
},
new PersonCategoryStatus()
{
Status = "Valid"
},
new PersonCategoryStatus()
{
Status = "Expired"
}
};
}
}
2。在Startup.cs中的ConfigurationServices中添加:
services.AddTransient<PersonInitializer>();
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
PersonInitializer personSeeder,
AcademicPortalIdentityInitializer identitySeeder)
4.在app.UseMvc()
personSeeder.Seed().Wait();
假设我已经运行了迁移
并希望稍后将新的PersonCategoryStatus添加为'inValid'。我怎么能实现这个目标。
new PersonCategoryStatus
List<PersonCategoryStatus> _personCategoryStatus = new List<PersonCategoryStatus>
{
new PersonCategoryStatus()
{
Status = "Baru"
},
new PersonCategoryStatus()
{
Status = "Valid"
},
new PersonCategoryStatus()
{
Status = "Expired"
},
new PersonCategoryStatus()
{
Status = "Invalid"
}
};
非常感谢任何帮助。提前致谢
答案 0 :(得分:0)
在Seed()身上而不是:
if(!_context.PersonCategoryStatuses.Any())
您应该遍历 _personCategoryStatus 集合并针对每种可能的状态执行upsert操作。