带有构造函数调用的 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 的 UsdPerHourDaysOfWork

根据上面的代码,我在数据库中的 BaseSalary 属性 设置为“0”,所有行

我的问题是,当我开始播种我的数据时,构造函数中的方法CountBaseSalary 会被调用吗?是否有可能以某种方式 运行 方法 CountBaseSalary 在此方法中需要的行之后?在哪里投放我的方法来获得我想要的价值?

对于 ClassConstructorProperties 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);
}