我有一个代码优先项目,其中一个POCO包含一个十进制字段,该字段正在数据库中设置为:
rate = c.Decimal(nullable: false, precision: 18, scale: 4),
我可以在SQL数据库中看到它反映了正确的精度和小数位数。我需要它存储最多4位数的小数位,即大于0.0001的任何小数-但是,当保留值时发生的情况是-超出小数位数前两位数字的所有内容都保留为0。即-0.0100将被保留为0.0100然而-0.0090、0.0050或0.0010将全部保留为0.0000。我可能在这里忽略了一些明显的方面,但是我一直在寻找任何文档参考,而且到目前为止似乎还没有找到任何东西,我希望能从中获得任何线索。谢谢!
答案 0 :(得分:0)
我在这里找到了答案,这似乎帮助我解决了问题。山姆说话的症状与我面对的完全一样。重做步骤Sam建议使用的似乎已解决了该问题。这是链接:
[关于此问题的Sam文章] [1] https://storiknow.com/entity-framework-decimal-scale-and-precision-convention/
已经在Sam的文章中实现了步骤,这导致了上下文创建方面的一个附带问题,并且在迁移添加过程中,我弹出了以下错误作为异常:
DatabaseAccess.databaseContext.ApplicationUserRole: : EntityType 'ApplicationUserRole' has no key defined. Define the key for this EntityType.
DatabaseAccess.databaseContext.ApplicationUserLogin: : EntityType 'ApplicationUserLogin' has no key defined. Define the key for this EntityType.
在我的情况下,通过在OnModelCreating()中添加以下几行来解决该问题:
modelBuilder.Entity<ApplicationUserRole>().ToTable("AspNetUserRoles").HasKey(ur => new { ur.RoleId, ur.UserId });
modelBuilder.Entity<ApplicationUserLogin>().ToTable("AspNetUserLogins").HasKey<int>(ul => ul.UserId);
此处是整个OnModelCreating()定义:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new decimalPrecisionAttributeConvention());
modelBuilder.Entity<ApplicationUserRole>().ToTable("AspNetUserRoles").HasKey(ur => new { ur.RoleId, ur.UserId });
modelBuilder.Entity<ApplicationUserLogin>().ToTable("AspNetUserLogins").HasKey<int>(ul => ul.UserId);
}
以防万一有人偶然发现同一问题。