Преобразование переполняется при сохранении структуры десятичной сущности 6 - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть десятичное свойство в сущности Product:

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 HResult = 0x80131501 Сообщение = Произошла ошибка при обновлении записей. Смотрите внутреннее исключение для деталей. Source = EntityFramework StackTrace: в System.Data.Entity.Internal.InternalContext.SaveChanges () в System.Data.Entity.Internal.LazyInternalContext.SaveChanges () в System.Data.Entity.DbContext.SaveChanges () в ConsoleApp11.Pro. Main (String [] args) в C: \ Users \ dilshodk \ source \ repos \ ConsoleApp11 \ ConsoleApp11 \ Program.cs: строка 22 * ​​1013 *

Внутреннее исключение 1: UpdateException: при обновлении записей произошла ошибка , Подробности см. Во внутреннем исключении.

Внутреннее исключение 2: OverflowException: Преобразование переполняется.

Когда я пытаюсь вставить значение из запроса SQL, оно работает:

 Insert into Products values (NEWID(),9999999999999999999)

Почему он не работает с EF и как я могу это решить?

1 Ответ

0 голосов
/ 11 февраля 2020

хе хе хе : o) да, у вас есть проблема, вы видите - вы определили ее как (тип базы данных) десятичное число (29,10), что означает 29 мест, одно для точки, 10 для цифр (например, 0,0123456789 допустимо, но 0,00123456789 будет записан как 0.0012345678), оставляя 18 мест для целых (например, 123456789012345678 хорошо, но 19 цифр из 9 слишком велики). Просто установите его как HasPercision(30,10) или HasPercision(29,5), и вы можете go.

...