我有一个问题,当我从上下文中获取所有Strategy
时,为什么我的DbSet
属性为null?如何使[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
属性为null。您能告诉我,如何在播种数据库时附加[NotMapped]
属性
?有可能吗?
编辑
当我想添加WorkStrategy
而不是“未映射”时,我在添加迁移时收到EF错误:
实体类型“ WorkStrategy”要求定义主键
但是我不想为WorkStrategy制作表格。
编辑
我在OnModelCreating
课堂上的context
:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Machine>().Ignore(x => x.Strategy);
builder.Seed();
base.OnModelCreating(builder);
}
它不能用作[NotMapped]
答案 0 :(得分:1)
您可以使用流畅的api忽略功能来代替未映射的功能
modelBuilder.Entity<Machine>().Ignore(x => x.Strategy );
答案 1 :(得分:0)
我认为您的问题不是未映射的属性,而是类的结构。 如果您有一个标记,则需要哪种策略类型,并根据该标记调整策略属性以初始化一个无效的策略,则可以使用Fluent-Api保留Notmapped-Attribute或Ignore-Method。