繁体   English   中英

没有外键的 EF Core 关系

[英]EF Core relation without foreign key

目前我有一个问题,我使用线性数据库,即它没有外键,表仅通过 id 字段关联,您必须在数据库中进行查询以将表与连接连接并获得结果,在 mysql 数据库中,它运行良好,因为它们只是查询,但是使用 Entity Framework 是问题出现的地方,我有一个员工表和一个人员表,它们由 PersonId 相关,因此使用 linq Z240AA2I want2029C56FABEEZ 查询,获取包含此人信息的员工列表,因此我会执行以下操作:

var empleados = context.Empleados.Include(x => x.Personas).ToList();

但由于它们在数据库级别与外键无关,EF 不允许我使用包含。

然后尝试这样的事情:

  var queryable = from e in context.Empleados
    join p in context.Personas
    on e.Idpersona equals p.Idpersona
    select new { e, p };

但它是一种匿名类型,我不知道如何将其 map 到员工列表中,也尝试这样做:

var queryable = from e in context.Empleados
                            join p in context.Personas
                            on e.Idpersona equals p.Idpersona
                            select new Empleado
                            { Noemp = e.Noemp, 
                              Nombre = p.Nombre
                            };

但是员工没有人员属性,这给了我一个错误。

最后,我尝试使用 dto,但我不想在包含解决问题时为我必须关联的每个表执行 dto

List<Empleado> listadeempleados = new List<Empleado>();
var personas = await context.Personas.ToListAsync();

    foreach(var item in personas)
    {
        var empleado = await context.Empleados.Where(x => x.Idpersona == item.Idpersona).FirstOrDefaultAsync();
        listadeempleados.Add(empleado);
    }
        var model = new EmpleadoPersonaListDTO();
        model.ListaEmpleados = listadeempleados;
        model.ListaPersonas = personas;

我找不到如何使用与外键无关的实体框架和表,我知道我应该有键,但这就是数据库的制作方式,我无法更改它

您不需要数据库中的外键来在 EF 中声明导航属性。 只需创建 EF model 就好像外键在那里一样。 当然,不要使用 Migrations 更新数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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