【问题标题】:EF Core completely ignores my selected properties in selectEF Core 完全忽略了我在选择中选择的属性
【发布时间】:2021-05-11 10:31:19
【问题描述】:

据我了解,以下代码应生成仅包含 RouteIdRouteNoShipId 的查询

        var tow = (from t in _context.AllTowData
                   where t.RouteId == id
                   orderby t.RouteNo descending
                   select new TowDefaults {
                       Id = t.RouteId,
                       TowNo = t.RouteNo,
                       ShipId = t.ShipId,
                       LastTow = t.RouteNo
                   })
            .FirstOrDefault();

但是,我得到:

SELECT v.route_id, v.route_no, v.tow_id, v.analysis_complete, v.checks_complete, v.cpr_id, v.date_created, v.date_last_modified, v.factor, v.fromportname, v.instrument_data_file, v.instrument_id, v.internal_number, v.mastername, v.message, v.miles_per_division, v.month, v.number_of_samples, v.number_of_samples_analysed_fully, v.prop_setting, v.route_status, v.sampled_mileage, v.serial_no_per_calendar_month, v.ship_speed, v.silk_reading_end, v.silk_reading_start, v.toportname, v.tow_mileage, v.validity, v.year
FROM view_all_tow_data AS v
WHERE v.route_id = '@__id_0'
ORDER BY v.route_no DESC
LIMIT 1

这是每一列除了明确要求的ShipId!我做错了什么?

同时使用 SQL Server 和 PostGres 数据库会发生这种情况

【问题讨论】:

  • AllTowDataexact 类型是什么?此外,您应该显示类模型 + 自定义映射代码(如果存在)。
  • 当您在Select 中包含一些未映射的([NotMappped].Ignore(...)d)源列时,通常会发生这种情况。在这种情况下,ShipId 似乎是配置为被忽略的属性。
  • 选择成​​匿名类型.Select(t => new { t.RouteId, TowNo = t.RoueNo });
  • @BjarkeHandsdal 我看不出匿名类型有什么帮助,但是......它没有:-(我试过了

标签: entity-framework-core entity-framework-core-3.1


【解决方案1】:

ShipId 属性未通过 [NotMapped] 注释或映射指令映射。就EF而言,该属性不存在。这有两个效果:

  1. EF“注意到”最终的Select 有一个未知部分,它切换到客户端评估(因为它是最终的Select)。这意味着:它将Select 之前的查询转换为不包含ShipId 列的SQL,执行它,并实现完整的AllTowData 实体。
  2. 它评估Select 客户端并返回请求的TowDefaults 对象,其中ShipId 具有其默认值,或者您在C# 代码中初始化的任何值,但数据库中没有任何值。

您可以通过在查询后检查_context.AllTowData.Local 来验证这一点:它将包含所有通过过滤器的AllTowData 实体。

从您的问题无法判断您应该做什么。也许您可以将属性映射到视图中的列。如果没有,您应该将其从 LINQ 查询中删除。在 LINQ 中的任何地方使用它,但在最终的 Select 中会导致运行时异常。

【讨论】:

  • 哦,****,我检查了这 50 万次 [也许不是相当那么多],甚至在问题中发布了模型,仍然直到它出现在问题中才看到[Not Mapped]。没关系...
猜你喜欢
  • 2017-03-04
  • 2011-06-20
  • 2021-08-14
  • 1970-01-01
  • 2021-11-16
  • 2020-12-09
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多