c# - 具有 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 制作表格。
编辑
我OnModelCreating
的context
课堂:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Machine>().Ignore(x => x.Strategy);
builder.Seed();
base.OnModelCreating(builder);
}
它不能作为[NotMapped]
解决方案
您可以使用 fluent api ignore 而不是 notmapped
modelBuilder.Entity<Machine>().Ignore(x => x.Strategy );
推荐阅读
- angular - Angular 6 Observer - Auth 调用了两次
- php - Google App Engine:运行 Laravel 5.6 项目的问题
- neural-network - LSTM 中权重矩阵的矩阵维度
- python - Google Analytics 嵌入 API 服务帐户访问令牌
- javascript - 在 TypeScript 中,是否有任何方法可以将函数返回值键入函数本身?
- javascript - 当 url 输入浏览器返回预期数据时,fetch() 返回不透明
- git - 测试和 README 更新是否应该包含在具有功能的提交中?
- dropzone.js - 将 maxfiles 动态添加到 dropzone
- java - 运行 @DataJpaTest Junit 时,正在使用资源和测试资源文件夹中的两个 data.sql 文件
- image - React Native 从数据库中检索图像文件路径