linq EF无外键的核心关系

hvvq6cgz  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(196)

目前我有一个问题,我使用的是线性数据库,也就是说,它没有外键,表只通过id字段相关,你必须在数据库中进行查询,用连接来连接表并获得结果,在mysql数据库中它工作得很好,因为它们只是查询,但实体框架是问题出现的地方,我有一个employee表和一个person表,它们通过PersonId相关联,因此使用linq c#查询,我希望获得一个雇员列表,其中还包含person的信息,因此我将执行以下操作:

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

但是由于它们在数据库级别上没有外键的关系,因此EF不允许使用include。
然后尝试以下操作:

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
                            };

但employee没有person属性,因此出现错误。
最后,我尝试使用dto,但我不想为必须关联的每个表都执行dto,因为include可以解决这个问题

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;

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

xqkwcwgp

xqkwcwgp1#

在EF中声明Navigation Properties不需要数据库中的外键,只需创建EF模型,就好像外键在那里一样。当然,也不要用迁移来更新数据库。

相关问题