【问题标题】:Conversion overflows in saving decimal entity framework 6保存十进制实体框架6中的转换溢出
【发布时间】:2020-02-11 16:15:22
【问题描述】:

我在产品实体中有一个小数属性:

public class Product
{
   public Guid Id { get; set; }
   public decimal Price { get; set; }
}

我想在模型映射中配置精度:

   class Context : DbContext
    {
        public DbSet<Product> Products { get; set; }
        public Context() : base("server=localhost;database=myDb2;trusted_connection=true;")
        {
            /* Database.Delete();
             Database.Create(); */
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>().HasKey(e => new { e.Id });
            modelBuilder.Entity<Product>().Property(s => s.Price).HasPrecision(29, 10);
        }
    }

现在我正在尝试保存长度为 19 的小数:

using (Context context = new Context())
        {
            var product = new Product();
            product.Id = Guid.NewGuid();
            product.Price = 9999999999999999999M;
            context.Products.Add(product);
            context.SaveChanges();
        }

抛出异常:

System.Data.Entity.Infrastructure.DbUpdateException H结果=0x80131501 Message=更新条目时发生错误。有关详细信息,请参阅内部异常。 来源=实体框架 堆栈跟踪: 在 System.Data.Entity.Internal.InternalContext.SaveChanges() 在 System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 在 System.Data.Entity.DbContext.SaveChanges() 在 C:\Users\dilshodk\source\repos\ConsoleApp11\ConsoleApp11\Program.cs:line 22 中的 ConsoleApp11.Program.Main(String[] args) 处

内部异常 1: UpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常。

内部异常 2: OverflowException:转换溢出。

当我尝试从 SQL 查询中插入值时,它可以工作:

 Insert into Products values (NEWID(),9999999999999999999)

为什么它在 EF 中不起作用,我该如何解决?

【问题讨论】:

标签: c# entity-framework decimal


【解决方案1】:

嘿嘿嘿。 :o) 是的,你有一个问题,你看 - 你将它定义为(数据库类型)十进制(29,10),这意味着 29 个位置,一个用于点,10 个用于数字(例如 0.0123456789 是有效的,但将写入 0.00123456789为 0.0012345678),为整体留下 18 个位置(例如 123456789012345678 很好,但 9 的 19 位太大)。只需将其设置为 HasPercision(30,10)HasPercision(29,5) 即可。

【讨论】:

  • HasPercision(30,10) 它仍然抛出异常
  • 另外,我尝试了 HasPercision(31,10)、HasPercision(32,10)、HasPercision(33,10) 甚至 HasPercision(38,10)
  • 我也面临同样的挑战。我已经在这两天了。有帮助吗???
  • 你试过 HasPercision(50,2) 吗?您是否也在数据库中将其定义为十进制(50,2)?只是说,这是您必须非常明确地说明要在数据库中记录的内容之一。在实践中,我从未见过任何测量 50 位数字的东西。如果以吨为单位,即使太阳的大小也不是 50 位数。
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 2014-06-07
  • 2017-12-10
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
相关资源
最近更新 更多