当通过EF4.1 NavigationProperty添加时,十进制类型失去了所有精度,可能是框架错误



我已经创建了一个示例项目,您可以在这里下载。

手动重新创建的步骤:

    创建新的MVC3 web项目。
  1. 添加。edmx
  2. 创建一个名为"Account"的实体
  3. 创建一个名为'AccountLineItem '的实体
  4. 为'AccountLineItem '添加一个十进制字段
  5. 在'Account'和'AccountLineItem'之间创建一对多关联,确保勾选在'Account'上创建导航属性的选项
  6. 添加代码来更新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();
    }
    

正如您所看到的,我正在用一个帐户和一个值为22.10的AccountLineItem更新数据库;但是,在运行这段代码之后,在SQLEXPRESS中出现的值22没有精度。

我发现这个行为使用SQL 2008 R2框,所以我不相信这个问题是与Express。

其他人可以复制这个行为吗?我做了什么明显的错误吗?

正如你在评论中提到的

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

这行告诉我们

  1. 列名为Amount
  2. 数据类型为十进制
  3. 精度是18位可存储的数字,既可以存储在左边,也可以存储在右边小数点。
  4. 刻度是0位数字,可以存储在小数点右边。

,因此必须更改比例值以保存小数点右侧的数字。你不能使用EF,你必须改变它从sql server管理工作室

最新更新