首页 > 解决方案 > EF Core 2.1.1 种子数据不适用于覆盖双精度

问题描述

你能告诉我为什么在我的数据库中我得到0值之后Seed method?这是它的样子:

public static void Seed(this ModelBuilder modelBuilder)
    {
        int countOfWorkers = 10;

        for (int i = 0; i < countOfWorkers; i++)
        {
            modelBuilder.Entity<Driver>().HasData(
            new Driver
            {
                // 10 same workers
                Id = i + 1,
                FarmId = 1,
                FirstName = "name" + i,
                LastName = "lastname" + i,
                UsdPerHour = 7.2,
                HoursPerDay = 8,
                DaysOfWork = 31
            });
        }
    }

还有我的Models课:

public abstract class Worker
{
    [Key]
    public int Id { get; set; }

    [ForeignKey("Farm")]
    public int FarmId { get; set; }
    public Farm Farm { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual double UsdPerHour { get; set; }
    public virtual int HoursPerDay { get; set; }
    public virtual int DaysOfWork { get; set; }

    public virtual double CountBaseSalary() => throw new NotImplementedException();
}

public class Driver : Worker
{
    public Driver() => BaseSalary = CountBaseSalary();

    public override double UsdPerHour { get; set; }
    public override int HoursPerDay { get; set; }
    public override int DaysOfWork { get; set; }

    public override double CountBaseSalary() => UsdPerHour* HoursPerDay *DaysOfWork;

}

我正在使用EF Core 2.1.1. 我做错了什么,我得到0's了驱动程序上的属性值?如果需要,我可以添加更多信息。

我的DbContext

public class FarmDbContext : DbContext
{
    public FarmDbContext(DbContextOptions<FarmDbContext> options) : base(options) { }

    public DbSet<Farm> Farms { get; set; }
    public DbSet<Worker> Workers { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Driver>();
        builder.Seed();
        base.OnModelCreating(builder);
    }
}

标签: c#asp.net-coreentity-framework-coreseeding

解决方案


如果全部Worker都有,UsdPerHour, HoursPerDay, DaysOfWork那么您不需要 中指定的那些字段Driver,它们将被继承。

如果只Driver需要这些字段,则应将它们从基类中删除Worker


推荐阅读