0

ここからダウンロードできるサンプルプロジェクトを作成しました。

手動で再作成する手順:

  1. 新しいMVC3Webプロジェクトを作成します。
  2. .edmxを追加します
  3. 「アカウント」という名前のエンティティを作成します。
  4. 'AccountLineItem'という名前のエンティティを作成します。
  5. 'AccountLineItem'にDecimalフィールドを追加します。
  6. 'Account'と'AccountLineItem'の間に1対多の関連付けを作成します。必ず、'Account'にナビゲーションプロパティを作成するオプションをオンのままにしてください。
  7. DBをどこでも更新するコードを追加します。HomeControllerでIndex()を使用しました。

    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();
    }
    

ご覧のとおり、私はDBをアカウントで更新し、AccountLineItemを値22.10で更新しています。ただし、このコードを実行すると、値22がSQLEXPRESSに精度なしで表示されます。

SQL 2008 R2ボックスを使用してこの動作を発見したので、問題がExpressにあるとは思われません。

他の誰かがこの振る舞いを再現できますか?私は露骨に間違ったことをしていますか?すべてのフィードバックを歓迎します。

4

1 に答える 1

1

コメントで述べたように

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

この行は私たちに教えてください

  1. 列名はAmountです
  2. DataTypeは10進数です
  3. 精度は18桁で、小数点の左側と右側の両方に格納できます。
  4. スケールは0桁で、小数点の右側に格納できます。

したがって、小数点の右側の桁を保存するには、スケール値を変更する必要があります。EFSQL ServerManagementStudioから変更する必要があります。

于 2011-08-25T15:01:34.110 に答える