繁体   English   中英

使用Entity Framework和Linq对不同的表进行相同的选择

[英]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并将其发送到前端

我可以用这种方式制作: 在此处输入图片说明

但是我正在寻找最好的方法,我正在尝试使我的代码简短易维护

另外这是我的dbcontext 在此处输入图片说明

一种方法是将表的类型保留在列表中,然后进行迭代

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM