带有构造函数调用的 EF Core 2.1.1 Seed 方法
EF Core 2.1.1 Seed method with consturctor call
为什么在seeding class的构造函数中设置的属性等于0?我有自己的种子方法:
public static void Seed(this ModelBuilder modelBuilder)
{
Random random = new Random();
int range = 20; // for doubles
int countOfWorkers = 10;
modelBuilder.Entity<Farm>().HasData(Farm.GetFarm());
for (int i = 0; i < countOfWorkers; i++)
{
modelBuilder.Entity<Driver>().HasData(
new Driver
{
// i belive that constructor launch in here
Id = i + 1,
FarmId = 1,
FirstName = "name" + i,
LastName = "lastname" + i,
UsdPerHour = Math.Round((random.NextDouble() * 20), 2),
HoursPerDay = random.Next(1, 23),
DaysOfWork = random.Next(1, 31)
});
}
}
Driver
class 有一个构造函数:
public class Driver : Worker
{
// constructor
public Driver() => BaseSalary = CountBaseSalary();
public override double BaseSalary { get; set; }
//this propertys like UsdPerHours are in my abstract 'Worker' class
public override double CountBaseSalary() => UsdPerHour* HoursPerDay *DaysOfWork;
}
该设定值 BaseSalary
基于 属性 来自 Seed 的 UsdPerHour
、DaysOfWork
等
根据上面的代码,我在数据库中的 BaseSalary
属性 设置为“0”,所有行
我的问题是,当我开始播种我的数据时,构造函数中的方法CountBaseSalary
会被调用吗?是否有可能以某种方式 运行 方法 CountBaseSalary
在此方法中需要的行之后?在哪里投放我的方法来获得我想要的价值?
对于 Class
,Constructor
在 Properties initialize
之前被调用。因此,您应该避免根据其他属性设置 Constructor
中的属性值。
尝试
for (int i = 0; i < countOfWorkers; i++)
{
var driver = new Driver
{
// i belive that constructor launch in here
Id = i + 1,
FirstName = "name" + i,
LastName = "lastname" + i,
UsdPerHour = Math.Round((random.NextDouble() * 20), 2),
HoursPerDay = random.Next(1, 23),
DaysOfWork = random.Next(1, 31)
};
driver.BaseSalary = driver.CountBaseSalary();
modelBuilder.Entity<Driver>().HasData(driver);
}
为什么在seeding class的构造函数中设置的属性等于0?我有自己的种子方法:
public static void Seed(this ModelBuilder modelBuilder)
{
Random random = new Random();
int range = 20; // for doubles
int countOfWorkers = 10;
modelBuilder.Entity<Farm>().HasData(Farm.GetFarm());
for (int i = 0; i < countOfWorkers; i++)
{
modelBuilder.Entity<Driver>().HasData(
new Driver
{
// i belive that constructor launch in here
Id = i + 1,
FarmId = 1,
FirstName = "name" + i,
LastName = "lastname" + i,
UsdPerHour = Math.Round((random.NextDouble() * 20), 2),
HoursPerDay = random.Next(1, 23),
DaysOfWork = random.Next(1, 31)
});
}
}
Driver
class 有一个构造函数:
public class Driver : Worker
{
// constructor
public Driver() => BaseSalary = CountBaseSalary();
public override double BaseSalary { get; set; }
//this propertys like UsdPerHours are in my abstract 'Worker' class
public override double CountBaseSalary() => UsdPerHour* HoursPerDay *DaysOfWork;
}
该设定值 BaseSalary
基于 属性 来自 Seed 的 UsdPerHour
、DaysOfWork
等
根据上面的代码,我在数据库中的 BaseSalary
属性 设置为“0”,所有行
我的问题是,当我开始播种我的数据时,构造函数中的方法CountBaseSalary
会被调用吗?是否有可能以某种方式 运行 方法 CountBaseSalary
在此方法中需要的行之后?在哪里投放我的方法来获得我想要的价值?
对于 Class
,Constructor
在 Properties initialize
之前被调用。因此,您应该避免根据其他属性设置 Constructor
中的属性值。
尝试
for (int i = 0; i < countOfWorkers; i++)
{
var driver = new Driver
{
// i belive that constructor launch in here
Id = i + 1,
FirstName = "name" + i,
LastName = "lastname" + i,
UsdPerHour = Math.Round((random.NextDouble() * 20), 2),
HoursPerDay = random.Next(1, 23),
DaysOfWork = random.Next(1, 31)
};
driver.BaseSalary = driver.CountBaseSalary();
modelBuilder.Entity<Driver>().HasData(driver);
}