[英]Seeding DB made by Code First EF Core DB
我想知道在EF Core建立数据库之后立即生成所需数据的最佳方法是什么。
我看到人们在C#代码中创建类来做到这一点,但是如果您有很多数据呢? 对我来说,我必须从我的系统中从美国进口所有州。
我认为最好运行某种sql脚本来执行此操作,但是我想重复检查需要一些检查。
编辑
假设我要使用在数据库中找到的这些脚本。 因此,当我的项目第一次运行时自动生成数据库时,将填充它们。
https://github.com/hiiamrohit/Countries-States-Cities-database
如果您使用的是EF Core 2.1,他们实际上已经添加了一个非常不错的新功能。
现在,在OnModelCreating
方法中,您可以在Entity方法上使用HasData扩展方法。
这是两个示例:
modelBuilder.Entity<Blog>().HasData(new Blog {BlogId = 1, Url = "http://sample.com"});
modelBuilder.Entity<Post>().HasData(
new {BlogId = 1, PostId = 1, Title = "First post", Content = "Test 1"},
new {BlogId = 1, PostId = 2, Title = "Second post", Content = "Test 2"});
要生成大量数据,您可以使用像Bogus这样的库,它“在本质上是C#的faker.js端口,并受到FluentValidation语法糖的启发”。 我们在项目中使用它,它非常适合。 您可以生成真实姓名,真实国家,真实电话号码等。来自GitHub的示例:
var testUsers = new Faker<User>()
.CustomInstantiator(f => new User(userIds++, f.Random.Replace("###-##-####")))
.RuleFor(u => u.Gender, f => f.PickRandom<Gender>())
.RuleFor(u => u.FirstName, (f, u) => f.Name.FirstName(u.Gender))
.RuleFor(u => u.LastName, (f, u) => f.Name.LastName(u.Gender))
.RuleFor(u => u.Avatar, f => f.Internet.Avatar())
.RuleFor(u => u.UserName, (f, u) => f.Internet.UserName(u.FirstName, u.LastName))
.RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName))
.RuleFor(u => u.SomethingUnique, f => $"Value {f.UniqueIndex}")
.RuleFor(u => u.CartId, f => Guid.NewGuid())
.RuleFor(u => u.FullName, (f, u) => u.FirstName + " " + u.LastName)
.RuleFor(u => u.Orders, f => testOrders.Generate(3).ToList())
.FinishWith((f, u) =>
{
Console.WriteLine("User Created! Id={0}", u.Id);
});
var user = testUsers.Generate(10000); // Generated 10000 users that match rules
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.