EF没有外键的核心关系



目前我有一个问题,我使用的是线性数据库,也就是说,它没有外键,表只通过id字段相关,你必须在数据库中进行查询,以连接具有连接的表并获得结果,在mysql数据库中,它工作得很好,因为它们只是查询,但使用实体框架是问题出现的地方,我有一个员工表和一个个人表,它们通过PersonId相关,所以通过linq c#查询,我想获得一个员工列表,其中还包含个人信息,所以我会做这样的事情:

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

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

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;

我找不到如何使用实体框架和与外键无关的表,我知道我应该有密钥,但数据库就是这样创建的,我不能更改它

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

最新更新