0

我创建了一个示例项目,您可以在此处下载。

手动重新创建的步骤:

  1. 创建新的 MVC3 Web 项目。
  2. 添加 .edmx
  3. 创建一个名为“帐户”的实体。
  4. 创建一个名为“AccountLineItem”的实体。
  5. 将 Decimal 字段添加到“AccountLineItem”。
  6. 在“Account”和“AccountLineItem”之间创建一对多关联,确保选中在“Account”上创建导航属性的选项。
  7. 添加代码以在任何地方更新数据库,我在 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();
    }
    

如您所见,我正在使用一个 Account 和一个值为 22.10 的 AccountLineItem 更新数据库;但是,运行此代码后,SQLEXPRESS 中出现的值 22 没有精度。

我使用 SQL 2008 R2 框发现了这种行为,所以我不认为问题出在 Express 上。

其他人可以复制这种行为吗?我在做一些公然错误的事情吗?欢迎所有反馈。

4

1 回答 1

1

正如你在评论中提到的

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

这条线告诉我们

  1. 列名是金额
  2. 数据类型是十进制
  3. 精度是 18 位,可以存储在小数点的左侧和右侧。
  4. scale 是 0 位,可以存储在小数点的右边。

因此您必须更改比例值以将数字保存到小数点右侧。你不能这样做,EF你必须从 sql server management studio 中更改它。

于 2011-08-25T15:01:34.110 回答