C# EF Core 2.1,带种子方法和NotMapped属性

C# EF Core 2.1,带种子方法和NotMapped属性,c#,asp.net-core,entity-framework-core,seeding,C#,Asp.net Core,Entity Framework Core,Seeding,我有一个问题,当我从上下文获取所有DbSet时,为什么我的Strategy属性为空?如何使属性在我的后端可见 我的班级是这样的: public class Machine { [Key] public int Id { get; set; } [NotMapped] public WorkStrategy Strategy { get; set; } public double GetManHours() => Strategy.TimeOfWor

我有一个问题,当我从上下文获取所有
DbSet
时,为什么我的
Strategy
属性为空?如何使属性在我的后端可见

我的班级是这样的:

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

    public double GetManHours() => Strategy.TimeOfWork(HoursPerDay);
}
//Machines
for(int i = 0; i < countOfMachines; i++)
{
    Machine machine = new Machine { Id = i + 1 };
    machine.Strategy = new FarmStrategy;
    modelBuilder.Entity<Machine>().HasData(machine);
}
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
}
我的
播种
方法的一部分,其中播种机如下所示:

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

    public double GetManHours() => Strategy.TimeOfWork(HoursPerDay);
}
//Machines
for(int i = 0; i < countOfMachines; i++)
{
    Machine machine = new Machine { Id = i + 1 };
    machine.Strategy = new FarmStrategy;
    modelBuilder.Entity<Machine>().HasData(machine);
}
策略
属性为空。您能告诉我,在为数据库设定种子时如何附加
[NotMapped]
属性吗 ? 可能吗

编辑

当我想将
WorkStrategy
添加为非“notmapped”时,我在添加迁移时从EF收到一个错误:

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

但是我不想为工作策略做一张桌子

编辑
上下文
类中创建模型时的我的

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

        builder.Seed();
        base.OnModelCreating(builder);
    }
模型创建时受保护的覆盖无效(ModelBuilder)
{
builder.Entity().Ignore(x=>x.Strategy);
builder.Seed();
基于模型创建(生成器);
}

它的工作方式不是
[NotMapped]

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

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

我认为您的问题不在于未映射属性,而在于类的结构。
如果您有一个标志,需要哪种类型的策略,并根据该标志调整策略属性,以在该标志为空时初始化策略,则可以使用Fluent Api保留Notmapped属性或Ignore方法。

not mapped属性表示“如果从db上下文映射,则忽略此属性”。您需要自己填充它。如果要用作值对象,则不需要为workStrategy创建新表。查找Value对象和[Owned]属性,它可能是您想要的。如果您具有
NotMapped
属性,则不应收到该错误消息。你有没有在别的地方用过这个模型?也许它甚至是一个
DbSet
?@DavidG抱歉,当我删除[NotMapped]时,我得到了那个massege,编辑的“种子”是将数据放入数据库的过程,如果你不想让它进入数据库,那么你就不给它种子。@michasaucer为什么你在它不起作用的时候接受这个答案?