[英]Seeding data in startup.cs
可以在startup.cs中播种数据吗? 在那里而不是在DbContext或迁移配置类中这样做是否有优点和缺点?
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
SeedData();
}
public void SeedData()
{
using (ApplicationDbContext _db = new ApplicationDbContext()) {
if (!_db.Books.Any(n => n.Name == "Seeded in Startup.cs"))
{
_db.Books.Add(new Book() { Name = "Seeded in Startup.cs", Date = "1966" });
}
_db.SaveChanges();
}
}
我们创建了一个SeedHelpers.cs。在此文件中,所有种子数据均可用。
public async Task Seed()
{
try
{
if (RoleManager.Roles.ToList().Count == 0)
foreach (string role in typeof(RoleConst).GetConstValue<string>())
await RoleManager.CreateAsync(new RoleEntity { Name = role.ToString() });
if (UserManager.Users.ToList().Count == 0)
{
UserEntity entity = new UserEntity
{
Email = "y",
Active = true,
Deleted = false,
EmailConfirmed = true,
Created = DateTime.UtcNow,
Modified = DateTime.UtcNow,
Name = "y",
UserName = "x"
};
await UserManager.CreateAsync(entity, "fg@123");
await UserManager.AddToRoleAsync(entity, RoleConst.Admin);
//Send Invitation email to Admin in the Production.
}
if(DapperLanguage.All().ToList().Count()==0)
{
await DapperLanguage.AddAsync(new Language
{
Id = Guid.NewGuid(),
Code = LanguageConst.English,
Name = "English"
});
await DapperLanguage.AddAsync(new Language
{
Id = Guid.NewGuid(),
Code = LanguageConst.Arabic,
Name = "Arabic"
});
}
}
catch (Exception ex)
{
LogManager.LogError(JsonConvert.SerializeObject(new { class_name = this.GetType().Name, exception = ex }));
}
}
并在Startup.cs文件中
public void Configuration(IAppBuilder app, Helpers.SeedHelpers seed)
{
ConfigureAuth(app);
seed.Seed().Wait();
}
尝试这种类型的方法。
如果您正在使用ef core,现在可以在ef映射配置中使用HasData():
https://docs.microsoft.com/zh-cn/ef/core/modeling/data-seeding
如果使用ef 6,则可以在DbContext上设置初始化程序,并且可以将每个实体的种子数据存储在单独项目中的单独文件中?
http://www.entityframeworktutorial.net/code-first/seed-database-in-code-first.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.