【问题标题】:Incorrect SQL generated by Pomelo with MySQL and .NET CorePomelo 使用 MySQL 和 .NET Core 生成的 SQL 不正确
【发布时间】:2020-01-17 19:52:12
【问题描述】:

我一直在使用 .NET Core 和 Pomelo.EntityFrameworkCore.MySql(v1.1.2,它不是最新的,但出于各种原因我更愿意继续使用它)。

我正在对模型类进行一些重构,创建子父关系(例如,订单有一个客户),现在当我运行我的项目时出现异常

2019-09-16T12:36:49.8158085-07:00 0HLPQRKH27D40 [INF] Executed DbCommand (6ms) [Parameters=[], 

CommandType='Text', CommandTimeout='0']
INSERT INTO `Order`
DEFAULT VALUES;
SELECT LAST_INSERT_ID(); (6438bdd5)
2019-09-16T12:36:49.9249074-07:00 0HLPQRKH27D40 [ERR] An exception occurred in the database while saving changes.
 (3b5ca34b)
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT VALUES;

问题似乎是在insert into 'order' default values; 中使用了default values,因为MySQL doesn't support that syntax。我的 mysql 开发版本是 5.1,但这似乎无关紧要,因为它似乎不在更高版本中。

我(天真地)查看了 Pomelo 源代码,但只发现在单元测试中使用了“默认值”。

【问题讨论】:

  • 什么操作产生了异常?添加新的Order?如果是,看起来所有Order 属性都使用默认值。确保至少一个属性/列没有 HasDefaultValueHasDefaultValueSql 设置(或在 1.1.2 中调用的任何内容)并且也不是由数据库自动生成的。如需更具体的答案,请发布Order 实体类和相关的流畅配置。
  • 谢谢@IvanStoev,我正在按顺序将属性映射到另一个对象的属性,例如public string PropA => obj.ProbA,当我停止这样做并使用getter 和setter 将其更改为长格式时,它开始工作。如果您愿意将其写为答案,我会接受。
  • 哦,实际上在属性中使用=> 会将它们从数据库表中删除,我没有意识到这一点。

标签: c# mysql .net-core entity-framework-core


【解决方案1】:

我正在按顺序将属性映射到另一个对象的属性,例如

public string PropA => obj.ProbA 

当我停止这样做并使用 getter 和 setter 将其更改为长格式时,它开始工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多