我想知道在EF Core创建数据库之后立即生成所需数据的最佳方法是什么。
我看到人们在C#代码中创建了类,但是如果你有很多数据呢?对我来说,我必须在我的系统中从美国进口所有国家。
我认为最好运行某种sql脚本来执行此操作,但我猜重复项需要进行一些检查。
修改
说我想使用我在数据库中找到的这些脚本。因此,当我的项目第一次运行时,我的数据库是自动生成的。
https://github.com/hiiamrohit/Countries-States-Cities-database
答案 0 :(得分:0)
如果您使用的是EF Core 2.1,他们实际上已添加了一项非常好的新功能。
EF Core 2.1 Release Announcement
在DbContext的int rec_helper(int n, int sum_so_far) {
if (n % 2 || n > 10) {
return sum_so_far + n;
}
return rec_helper(n+2, sum_so_far + (n+1));
}
int rec(int n) {
return rec_helper(n, 0);
}
方法中,您现在在Entity方法上有一个HasData扩展方法。
以下是两个例子:
OnModelCreating
答案 1 :(得分:0)
要生成大量数据,您可以使用像Bogus这样的lib,它“基本上是faker.js的C#端口,受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