【问题标题】:unknown column 'extent3.id' in 'where clause''where 子句'中的未知列'extent3.id'
【发布时间】:2021-06-12 16:09:24
【问题描述】:

我收到以下错误

unknown column 'extent3.id' in 'where clause' 

当我在automapper.cs 配置文件中添加以下行时。

.ForMember(d => d.hq_state, m => m.MapFrom(o => o.firm_address.Where(c
 => (c.record_status != DeleteStatus && c.is_hq==true)).FirstOrDefault().ab_state_name))



x.CreateMap<firm, SupplierAutoCompleteDTO>()
                 .ForMember(d => d.display_name, m => m.MapFrom(o => o.name))
                 .ForMember(d => d.firm_contacts, m => m.MapFrom(o => o.firm_contacts.Where(c => c.record_status != DeleteStatus)))
                 .ForMember(d => d.hq_state, m => m.MapFrom(o => o.firm_address.Where(c => (c.record_status != DeleteStatus && c.is_hq==true)).FirstOrDefault().ab_state_name))
                 .ForMember(d => d.supplier_status, m => m.MapFrom(o => o.mst_firm_status.name));

【问题讨论】:

  • 查看mysql数据库并验证该列是否存在于数据库中。
  • 它存在,我加倍检查,它就像一个已知的 MySQL 连接器与 EF 的错误,现在我在这里寻找一些建议,如何将这个映射更改为不产生的不同 LINQ 语法错误。
  • 当 DateTime 值为空时,您提供的链接是错误的。您的 ID 有问题。该链接来自 2013/2014 年,类似的旧错误很久以前就已修复。一些类似的错误可能是由 CORE 引起的。但这看起来不像是 CORE 错误。
  • 但如果我删除这一行 .ForMember(d => d.hq_state, m => m.MapFrom(o => o.firm_address.Where(c => (c.record_status != DeleteStatus && c.is_hq==true)).FirstOrDefault().ab_state_name)) 不会有错误,是的,该列也存在于 DB 和 EF 模型中。

标签: c# mysql entity-framework linq


【解决方案1】:

这通常发生在 MySQL 考虑column value as a column name 时。让我用一个例子来解释:

创建一个简单的表:

mysql> CREATE TABLE T1 (id int, name varchar(200), city varchar(200));
Query OK, 0 rows affected (0.24 sec)

插入一些记录:

mysql> INSERT INTO T1 values (1, 'rathish', 'ooty');
Query OK, 1 row affected (0.04 sec)

mysql> INSERT INTO T1 values (2, 'kumar', 'the nilgiris');
Query OK, 1 row affected (0.05 sec)

现在让我们尝试更新一条记录:

mysql> UPDATE T1 SET name = 'rathish kumar' WHERE name = `rathish`;
ERROR 1054 (42S22): Unknown column 'rathish' in 'where clause'

当我在列值周围使用 backtick (`) 时会发生这种情况。

让我们尝试使用单引号或双引号:

mysql> UPDATE T1 SET name = 'rathish kumar b' WHERE name = 'rathish';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

有效!!!让我们再看一个场景:

mysql> UPDATE T1 SET name = 'rathish kumar b' WHERE name = kumar;
ERROR 1054 (42S22): Unknown column 'kumar' in 'where clause'

这里没有引号,同样的错误。让我们再检查一个场景:

mysql> UPDATE T1 SET name = 'rathish kumar b' WHERE id = kumar;
ERROR 1054 (42S22): Unknown column 'kumar' in 'where clause'

MySQL 再次认为,它是一个列名。所以我的猜测是,extent3.id 列被backticks 包围或试图分配value with a data type which is not id data type and without quotes

WHERE extent3.id = `value`; # backtick - value considered as column name

(或)

WHERE extent3.id = value; # without quotes - value considered as column name 

必须是:

WHERE extent3.id = 'value'; # single or double quotes - for string type

WHERE extent3.id = 100; # for int type 

解决此问题将有助于解决此错误,请尝试告诉我们是否有帮助。如果没有,请共享生成的查询以进行进一步分析。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2020-06-28
    相关资源
    最近更新 更多