Тип десятичной дроби, теряющий всю точность при добавлении через EF4.1 NavigationProperty, возможная ошибка инфраструктуры? - PullRequest
0 голосов
/ 25 августа 2011

Я создал пример проекта, который вы можете загрузить здесь .

Шаги для воссоздания вручную:

  1. Создание нового веб-проекта MVC3.
  2. Добавление .edmx
  3. Создание объекта с именем «Account.»
  4. Создание объекта с именем «AccountLineItem.»
  5. Добавление десятичного поля в «AccountLineItem.'
  6. Создайте связь «один ко многим» между «Account» и «AccountLineItem», не забудьте оставить флажок, чтобы создать свойство навигации для «Account».
  7. Добавьте код для обновления БД в любом месте, я использовал Index () на HomeController:

    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";
    
        using (var db = new TestStoreContainer())
        {
            Account acc = new Account();
            acc.Name = "Test Account";
    
            AccountLineItem accItem = new AccountLineItem();
            accItem.Amount = 22.10M;
    
            acc.AccountLineItems.Add(accItem);
    
            db.Accounts.AddObject(acc);
            db.SaveChanges();
        }
    
        return View();
    }
    

Как видите, я обновляю БД с помощью учетной записи и AccountLineItemсо значением 22,10;Однако после запуска этого кода в SQLEXPRESS появляется значение 22 без точности.

Я обнаружил это поведение с помощью окна SQL 2008 R2, поэтому я не думаю, что проблема связана с Express.

Может ли кто-нибудь повторить это поведение?Я делаю что-то явно не так?Все отзывы приветствуются.

1 Ответ

1 голос
/ 25 августа 2011

как вы упомянули в своем комментарии

'[Amount] decimal(18,0) NOT NULL'

эта строка говорит нам

  1. имя столбца Сумма
  2. Тип данных десятичный
  3. составляет 18 цифр, которые можно сохранить как слева, так и справа от десятичная точка.
  4. - это 0 цифр, которые можно сохранить справа от десятичной точки.

, поэтому вы должны изменить значение шкалы, чтобы сохранить цифры справа от десятичной точки. вы не можете сделать это с помощью EF, вам нужно сменить его на SQL Server Studio Studio.

...