目前我有一个问题,我使用的是线性数据库,也就是说,它没有外键,表只通过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;
我找不到如何使用实体框架和与外键无关的表,我知道我应该有键,但这是数据库的制作方式,我无法更改它
1条答案
按热度按时间xqkwcwgp1#
在EF中声明Navigation Properties不需要数据库中的外键,只需创建EF模型,就好像外键在那里一样。当然,也不要用迁移来更新数据库。