C# 在使用MySQL时,EntityFramework4为什么要尝试将long转换为十进制?
每当我有一个带有C# 在使用MySQL时,EntityFramework4为什么要尝试将long转换为十进制?,c#,asp.net,mysql,entity-framework,C#,Asp.net,Mysql,Entity Framework,每当我有一个带有BIGINT主键的表时,我可以插入新记录,但不能更新现有记录。当我尝试执行更新时,出现以下错误: “指定的值不是'Edm.Decimal'类型的实例” 示例模型: public class Model { public long ModelID { get; set; } public DateTime ProcessedOn { get; set; } } 更新代码示例: public bool SetModelProcessed(long id) {
BIGINT
主键的表时,我可以插入新记录,但不能更新现有记录。当我尝试执行更新时,出现以下错误:
“指定的值不是'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”未定义键。定义此EntityType的键。
使用
long
而不是ulong
不是我所需要的,但我想它必须这样做。如果这恰好是数据库中的一个无符号bigint,那么我相信它会被映射到一个十进制而不是long
-不确定为什么它不使用ulong
。但是我要从这里开始,确保您的bigint已签名。您能显示从DbContext
继承的db类吗?这不是代码优先,所以entities类从ObjectContext继承。你想看那个课程吗?起初,我用的是ulong。我发现一些文章说EF不支持映射到无符号类型。所以我试着只使用一个bigint/long,但也有同样的问题。但是你确定它是数据库中的一个bigint,而不是一个未签名的bigint吗?当我尝试使用ulong时,它最初是未签名的。我从头开始创建了一个新表,其中只有一个bigint(unsigned)和date字段来匹配上述模型。