Warum ist die im Konstruktor der Seeding-Klasse festgelegte Eigenschaft gleich 0? Ich habe meine eigene Samenmethode:
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
hat einen Konstruktor:
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;
}
Der eingestellte Wert BaseSalary
basiert auf Eigenschaften von Seed wie UsdPerHour
, DaysOfWork
usw.
Aus dem obigen Code wird meine BaseSalary
Eigenschaft in der Datenbank auf '0' gesetzt, alle Zeilen
Meine Frage ist, ist meine Methode CountBaseSalary
vom Konstruktor abrufen, wenn ich Seeding my Data CountBaseSalary
? Ist es möglich, die Methode CountBaseSalary
nach Zeilen CountBaseSalary
, die in dieser Methode benötigt werden? Wo kann ich meine Methode einsetzen, um den gewünschten Wert zu erzielen?
Für Class
wird der Constructor
aufgerufen, bevor Properties initialize
. Sie sollten also vermeiden, Eigenschaftenwerte in Constructor
basierend auf anderen Eigenschaften festzulegen.
Versuchen
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);
}