У меня вопрос, почему мое свойство 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
имеет значение null. Не могли бы вы сказать, как добавить свойство [NotMapped]
при заполнении базы данных?
? Это возможно?
EDIT
Когда я хочу добавить WorkStrategy
как «не отображенный», я получаю сообщение об ошибке от EF при добавлении миграции:
Тип сущности 'WorkStrategy' требует определения первичного ключа
Но я не хочу делать таблицу для WorkStrategy.
EDIT
Мой OnModelCreating
в context
класс:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Machine>().Ignore(x => x.Strategy);
builder.Seed();
base.OnModelCreating(builder);
}
Это не работает, как [NotMapped]