[英]Make the same select to different tables using Entity Framework and Linq
好! 我将解释我不想做什么:
这是我数据库的实体关系图。 我的前端有一个这样的Json:
var json = {
DatesReport: [],
Maquinas: [],
Faltantes: [],
ParosLinea: [],
Reinsertos:[],
Auditado: [],
Pendientes: [],
TiempoExtra: [],
Scrap: [],
Criticos: [],
Accidentes: []
};
我已经有逻辑来填充此Json,然后将其发送到我的后端。
这是我的方法,从前端到后端接收json,然后以这种方式插入所有值
所以我的问题是我找不到与插入所有不同表的所有数据相似的方法
我正在寻找一种方法来在后端的所有不同表中进行选择,形成json并将其发送到前端
但是我正在寻找最好的方法,我正在尝试使我的代码简短易维护
一种方法是将表的类型保留在列表中,然后进行迭代
List<Type> types = new List<Type>{ typeof(FirstTableType), typeof(SecondTableType) };
foreach(Type type in types)
{
var searchedEntities = dbContext.Set(type).Where(x => (x as AbstractClass).foreignKey == searchNumber);
// The rest of your logic
}
但这仍然需要您至少编写一次所有类型。 它还将要求所有类型都具有一个名为foreignKey的属性 (通过接口或抽象类)。
您可以查看Entity Framework的DbContext类的文档以了解其他选项。 https://docs.microsoft.com/zh-cn/dotnet/api/system.data.entity.dbcontext?view=entity-framework-6.2.0
看到数据库模型,您应该有一个包含所有集合的DatesReport
类。 因此,而不是像这样的Json对象:
{ DatesReport: [], Maquinas: [], Faltantes: [], ParosLinea: [], Reinsertos:[], Auditado: [], Pendientes: [], TiempoExtra: [], Scrap: [], Criticos: [], Accidentes: [] }
...应该有一个看起来像...的班级
class DatesReport
{
public int IdReport { get; set; }
... more properties
public ICollection<Maquina> Maquinas { get; set; }
public ICollection<Faltante> Faltantes { get; set; }
... etc.
}
在上下文中是一个属性...
public DbSet<DatesReport> Reports { get; set; }
现在,仅通过一个Where条件就可以获取所需的数据:
var report = context.Reports
.Include(r => r.Maquinas)
.Include(r => r.Faltantes)
... etc
.Single(r => r.Id == id)
序列化的report
看起来将与您现在拥有的Json不同,但是UI代码应该可以处理该报告。 同样,它应该返回一个包含这些集合的DatesReport
对象。 如果是这样,添加新报告将变得非常简单:
context.Reports.Add(report);
context.SaveChanges();
其中report
是进入操作方法MetodoRecibe
而不是datos
对象的datos
对象。 它将一次性添加报告和所有包含的集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.