【发布时间】:2019-06-03 09:26:33
【问题描述】:
为什么种子类的构造函数中设置的属性等于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 类有一个构造函数:
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?在哪里转换我的方法以获得我想要的价值?
【问题讨论】:
-
除了数据播种之外,构造函数内的
CountBaseSalary()将始终返回0,因为属性尚未初始化并且具有默认值(0)。 -
我知道,但也许有可能在初始化其他属性后在 Seed 中调用该函数而不从它执行
static?
标签: c# asp.net-core entity-framework-core seeding