¿Por qué la propiedad establecida en el constructor de la clase de inicialización es igual a 0? Tengo mi propio método de semilla:
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)
});
}
}
Clase de Driver
tiene un constructor:
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;
}
Ese valor de base BaseSalary
basado en propiedades de Seed como UsdPerHour
, DaysOfWork
, etc.
Desde el código anterior, mi propiedad BaseSalary
en la base de datos se establece en '0', todas las filas
Mi pregunta es, ¿es mi método CountBaseSalary
del constructor get call cuando comienzo a sembrar mis datos? ¿Es posible ejecutar el método CountBaseSalary
alguna manera después de las filas que son necesarias en este método? ¿Dónde lanzar mi método para obtener el valor que quiero?
Para la Class
, se llama al Constructor
antes de que se Properties initialize
. Por lo tanto, debe evitar establecer valores de propiedades de Constructor
basándose en otras propiedades.
Tratar
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);
}