使用 MySQL 时,为什么实体框架 4 试图将长整型转换为小数点

本文关键字:长整型 转换 小数点 MySQL 为什么 框架 实体 使用 | 更新日期: 2023-09-27 18:36:13

每当我有一个主键BIGINT的表时,我都可以插入新记录,但不能更新现有记录。当我尝试进行更新时,出现以下错误:

"The specified value is not an instance of type 'Edm.Decimal'"

示例模型:

public class Model
{
    public long ModelID { get; set; }
    public DateTime ProcessedOn { get; set; }
}

示例更新代码:

public bool SetModelProcessed(long id)
{
    var entity = db.models.SingleOrDefault(m => m.ModelID == id);
    entity.ProcessedOn = DateTime.Now;
    db.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
    db.SaveChanges();
 }

即使是像这样简单的模型对我来说也是失败的。有人知道发生了什么吗?

编辑

我尝试了代码优先的方法。实体框架 4.3 甚至无法生成 mySQL 数据库,这显然是添加迁移功能后 mySQL 和实体框架版本的问题。

自从降级到版本 4.1.10715.0 以来,long有效,ulong仍然不起作用。如果属性是ulong,EF 不会将属性确认为主键。

EntityType 'Model' has no key defined. Define the key for this EntityType.

使用 long 而不是 ulong 不是我需要的,但我想它必须这样做。

使用 MySQL 时,为什么实体框架 4 试图将长整型转换为小数点

如果这恰好是数据库中的无符号 bigint,那么我相信它会被映射到十进制而不是long - 不确定为什么它不只是使用ulong。但我会从那里开始,确保你的 bigint 被签名。

多年后...在 DbContext 的 OnModelCreateating() 方法中使用 HasColumnType("long")。请参阅实体框架核心不会映射到 BigInteger