首页 > 解决方案 > Entity Framework Core 5.0 没有很好地映射 mysql 查询

问题描述

我正在将 ASP .Net Core 2.1 应用程序迁移到 ASP .NET 5.0,但我在实体框架方面遇到了麻烦。如果我在 MySQL 中执行相同的查询,我的应用程序中的结果与结果不匹配

我有这个查询

puestoCajas = _dataContext.puestocajas
    .Include(x => x.ObjSite)
    .Include(x => x.ObjCajaState)
    .Where(x => x.Enable &&
                x.SiteId == user.ObjEmployee.SiteId)
    .ToList();

查询是

SELECT `p`.`Id`, `p`.`Abrio`, `p`.`CajaMovementId`, `p`.`CajaStateId`, `p`.`Description`, `p`.`Enable`, `p`.`SiteId`, `s`.`Id`, `s`.`Address`, `s`.`CityId`, `s`.`Email`, `s`.`Enable`, `s`.`Name`, `s`.`Phone`, `c`.`Id`, `c`.`Description`, `c`.`Discriminator`
FROM `puestocajas` AS `p`
INNER JOIN `sites` AS `s` ON `p`.`SiteId` = `s`.`Id`
INNER JOIN `cajastate` AS `c` ON `p`.`CajaStateId` = `c`.`Id`
WHERE `p`.`Enable` AND (`p`.`SiteId` = 7);

我从 Visual Studio 输出窗口复制,当我直接在 MySQL 中执行此操作时的结果是 // 注意 CajaStateId 和 ObjCajaState 不匹配,我不知道为什么会发生这种情况。

ID 阿布里奥 CajaMovementId CajaStateId 描述 使能够 站点 ID ID 地址 城市编号 电子邮件 使能够 姓名 电话 ID 描述 鉴别器
'4' '员工1' '4' '1' '普埃斯托 2' '1' '7' '7' '地址1 ' '900014' 'examplemail@gmail.com' '1' “圣米格尔” '03811234567' '1' '阿比尔塔' 'CajaOpen'

在我的应用程序中,结果如下:

In my app the result is the following: 
puestocajas [1]= {
    Abrio = "Employee1", 
    CajaMovementId=4,
    CajaMovements,
    CajaStateId = 1,
    Description = Puesto 2,
    Enable = true,
    Id=4,
    **ObjCajaState {
        Description = "Cerrada",
        Id= 2
    }**,
    ObjSite,
    SiteId
}
public class PuestoCaja
{
    public int Id 
    public string Description 
    public Site ObjSite 
    public int SiteId 
    public bool Enable 
    public CajaState ObjCajaState 
    public List<CajaMovement> CajaMovements 
    public int? CajaMovementId 
    public int CajaStateId 
    public string Abrio 
}

public abstract class CajaState
{
    public int Id {get; set;}
    public string Description {get; set;}
}

public class CajaOpened : CajaState
{
    public CajaOpened()
    {
        this.Id = 1;
        this.Description = "Abierta";
    }
}

public class CajaClosed : CajaState
{
    public CajaClosed()
    {
        this.Id = 2;
        this.Description = "Cerrada";
    }
}

标签: mysqlasp.net-corepomelo-entityframeworkcore-mysql

解决方案


不知何故,Pomelo Entity Framework Core 没有映射导航属性。我必须在模型构建器中配置它们,它就是这样工作的。


推荐阅读