C#使用MySQL从EF6 Code-First DB获取错误的十进制值

时间:2016-08-29 09:27:41

标签: c# mysql asp.net-mvc entity-framework-6 decimal

我们的项目中有一个代码优先的数据库,在我们的一个模型中有一个小数。 我们将小数精度设置为(6,2),我们在mysql数据库的结构中检查了它。 db的整理是utf8_unicode_ci

我们从视图中将4.00的值保存到数据库中,这是正确的。但是,现在我们尝试从数据库中获取值,而不是获取4.004.00m,我们得到400M。逗号只是已经

所有帮助表示赞赏。

(但是,请不要建议除以100.那个丑陋的修复你知道吗。)

修改 型号:

public class RSU
{
    public int Id { get; set; }
    public virtual RSUSlot SlotRef { get; set; }
    public decimal? Length { get; set; }
}

INSERT代码:

using(dbCOntext db = new dbCOntext())
{
    db.Add(new RSU{ Length = 4.00m });
    db.SaveChanges();
}

GET:

public static CabinetConfig GetCabinet(M4CDbContext db, int id)
{
    return db.CabinetConfig
        .Include(m => m.RSURef)
        .Where(m => m.Id == id)
        .FirstOrDefault();
}

1 个答案:

答案 0 :(得分:0)

我不确定为什么这不适用于MySQL,但想法是:

使用Fluent API方法为您的班级创建EntityTypeConfiguration

public class RSUConfiguration : EntityTypeConfiguration<RSU>
{
    public RSUConfiguration()
    {
        Property(x => x.Length)
            .HasPrecision(6, 2);
    }
}

并将其添加到您的modelBuilder

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<RSU>().Property(x => x.Length).HasPrecision(6, 2);    
    modelBuilder.Configurations.Add(new RSUConfiguration());

    base.OnModelCreating(modelBuilder);
}