首页 > 解决方案 > 具有 Seed 方法和 NotMapped 属性的 EF Core 2.1

问题描述

我有一个问题,当我从上下文中Strategy获取所有内容时,为什么我的属性为空?DbSet如何[NotMapped]在我的后端显示属性?

我的课看起来像这样:

public class Machine
{
    [Key]
    public int Id { get; set; }
    [NotMapped]
    public WorkStrategy Strategy { get; set; }

    public double GetManHours() => Strategy.TimeOfWork(HoursPerDay);
}

WorkStrategy是一个抽象类:

public abstract class WorkStrategy
{
    public abstract double TimeOfWork(double hours);
}

public class FarmStrategy : WorkStrategy
{
    public override double TimeOfWork(double hours) => // do things
}

public class CultivationStrategy : WorkStrategy
{
    public override double TimeOfWork(double hours) => //do things
}

我播种机器的方法的一部分Seed如下所示:

//Machines
for(int i = 0; i < countOfMachines; i++)
{
    Machine machine = new Machine { Id = i + 1 };
    machine.Strategy = new FarmStrategy;
    modelBuilder.Entity<Machine>().HasData(machine);
}

但是当我Machines从数据库调用时:

var machines = _context.Machines;

Strategy属性为空。你能告诉我,[NotMapped]在播种数据库时如何附加属性?有可能吗?

编辑

当我想添加WorkStrategy为未“未映射”时,我在添加迁移时收到来自 EF 的错误:

实体类型“WorkStrategy”需要定义一个主键

但我不想为 WorkStrategy 制作表格。

编辑OnModelCreatingcontext课堂:

protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Machine>().Ignore(x => x.Strategy);

        builder.Seed();
        base.OnModelCreating(builder);
    }

它不能作为[NotMapped]

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

解决方案


您可以使用 fluent api ignore 而不是 notmapped

modelBuilder.Entity<Machine>().Ignore(x => x.Strategy );

推荐阅读