代码之家  ›  专栏  ›  技术社区  ›  michasaucer

ef core 2.1.1带有constructor调用的种子方法

  •  0
  • michasaucer  · 技术社区  · 7 年前

    为什么种子设定类的构造函数中设置的属性等于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 基于类似种子的属性 UsdPerHour , DaysOfWork 等。

    从上面的代码,我的 基础设施 数据库中的属性设置为“0”,所有行

    我的问题是,我的方法 CountBaseSalary 从构造器获取调用时,我开始播种我的数据?是否可能以某种方式运行方法 伯爵夫人 在这个方法中需要的行之后?在哪里强制转换我的方法以获得我想要的值?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Edward    7 年前

    为了 Class , the Constructor 以前调用过 Properties initialize . 因此,应避免设置属性值 构造函数 基于其他属性。

    尝试

    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);
    }
    
    推荐文章