使用 MySQL 时,为啥 Entity Framework 4 试图将 long 转换为小数?
Posted
技术标签:
【中文标题】使用 MySQL 时,为啥 Entity Framework 4 试图将 long 转换为小数?【英文标题】:When using MySQL, why is Entity Framework 4 trying to convert a long to a decimal?使用 MySQL 时,为什么 Entity Framework 4 试图将 long 转换为小数? 【发布时间】:2012-06-07 01:55:34 【问题描述】:只要我有一个带有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();
即使是像这个这样简单的模型对我来说也失败了。有人知道发生了什么吗?
编辑
我尝试了代码优先的方法。 Entity Framework 4.3 甚至无法生成 mysql 数据库,这显然是 mySQL 和添加迁移功能后的 Entity Framework 版本的问题。
自从降级到版本 4.1.10715.0,long
有效,ulong
仍然无效。如果属性是 ulong
,EF 不会将其确认为主键。
EntityType 'Model' has no key defined. Define the key for this EntityType.
使用long
代替ulong
不是我需要的,但我猜它必须这样做。
【问题讨论】:
你能显示继承自DbContext
的db类吗?
这不是代码优先,因此实体类继承自 ObjectContext。你想看那堂课吗?
【参考方案1】:
如果这恰好是数据库中的无符号 bigint,那么我相信它会映射到小数而不是 long
- 不知道为什么它不只使用 ulong
。但我会从那里开始,确保您的 bigint 已签名。
【讨论】:
最初,我使用的是 ulong。我发现一些文章说 EF 不支持映射到无符号类型。所以我只尝试了一个 bigint/long,但遇到了同样的问题。 但是你确定它是数据库中的 bigint,而不是未签名的 bigint? 最初是未签名的,当我尝试使用 ulong 时。我从头开始创建了一个新表,其中只有一个 bigint(无符号)和日期字段来匹配上述模型。以上是关于使用 MySQL 时,为啥 Entity Framework 4 试图将 long 转换为小数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Entity Framework Raw Sql Query 从 MySql 返回具有不需要值的对象?
为啥Entity Framework没有在使用SingleOrDefault时生成的SQL中添加“where”?
为啥在我运行迁移时 Entity Framework 包会自动更新?
为啥运行时表达式会导致 Entity Framework Core 5 的缓存发生冲突?