Код Entity Framework Сначала усекает мои десятичные числа

Я использую Entity Framework 6.x с использованием подхода Code First в приложении MVC 5. В этой конкретной ситуации моя модель (среди прочего) содержит два свойства, называемых Широта и Долгота:

[Required, Range(-90, +90)]
public decimal Latitude { get; set; }

[Required, Range(-180, +180)]
public decimal Longitude { get; set; }

И когда я выполнил миграцию, я получил что-то вроде этого

CreateTable("ResProperty"), c => new {
        :
    Latitude = c.Decimal(nullable: false, precision: 10, scale: 8),
    Longitude = c.Decimal(nullable: false, precision: 11, scale: 8),
        :
})
... other stuff

так что широта и долгота имеют 8десятичный цифры. Первый с 2 ​​целыми числами (максимум 90) и последний с 3 целыми числами (максимум 180).

После выполнения команды Update-Database столбцы моей таблицы отображаются так:

Latitude decimal(10,8)
Longitude decimal(11,8)

это кажется мне хорошим. Теперь, на мой взгляд, у меня есть карта и код Javascript, который позволяет пользователю переместить маркер. Это тоже хорошо работает. Когда маркер перемещен, поля «Широта» и «Долгота» заполняются обновленным значением, которое (Javascript) имеет более 12 десятичных цифр. Это не имеет значения AFAIK, потому что моя шкала составляет 8 десятичных знаков.

После нажатия кнопки отправки и вызова метода «Создать» или «Редактировать POST» я проверяю экземпляр модели и подтверждаю, что фактические значения, передаваемые в модель в контроллер, являются правильными, у них более чем достаточно десятичных цифр (таких, которые кодируют в Javascript место). Таким образом, значение является правильным.

Теперь ... проблема заключается в том, что после выполнения db.SaveChanges () база данных обновляется - и я подтвердил, что произошла фактическая запись / обновление - но каким-то образом внутри EF игнорирует мои фактические значения и записывает усеченную широту / долготу округляется до ТОЛЬКО ДВУХ десятичных цифр, поэтому моя широта показывает в БД значение 09.500000000, все остальные десятичные цифры обнуляются, потому что кажется, что округление имело место.

// Prior to SaveChanges()
Latitude = 9.08521879
Longitude = -79.51658792
// After SaveChanges()
Latitude = 9.08000000
Longitude = -79.51000000

Почему это округляется, если я указал правильный масштаб и точность, а столбец также имеет правильный масштаб и точность? почему SaveChanges изменяет мои значения?

Я нашел этот пост (http://weiding331.blogspot.com/2014/01/entity-framework-decimal-value.html), что является той же проблемой, но я не знаю, как я могу это исправить (если это так), потому что я уже выполнил несколько миграций и добавлений данных после того, как рассматриваемая таблица была "перенесена".

подведение

Тип данных модели правильный (десятичный)Код переноса базы данных имеет правильный прецизион / масштаб (широта 10/8 ион 11/8)Столбцы базы данных SQL имеют правильную точность / масштаб (широта 10/8, длинная 11/8)Переданные в модели значения имеют как минимум 8 десятичных цифр для широты и долготыфактическая запись / обновление значения происходит в базе данных без ошибок, но ...Значения, записанные в базе данных для этих двух столбцов, усекаются до ДВУХ десятичных цифр и показывают другие наименее значимые десятичные цифры как ноль (0)

Ответы на вопрос(1)

Ваш ответ на вопрос