【问题标题】:EF Core 2.1.1 Seed data not working with override doubleEF Core 2.1.1 种子数据不适用于覆盖双精度
【发布时间】:2019-06-03 07:16:24
【问题描述】:

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

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-core entity-framework-core seeding


    【解决方案1】:

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

    如果只有Driver 需要这些字段,那么应该从基类Worker 中删除它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2021-04-26
      相关资源
      最近更新 更多