我已经创建了一个示例项目,您可以在这里下载。
手动重新创建的步骤:
- 创建新的MVC3 web项目。
- 添加。edmx
- 创建一个名为"Account"的实体
- 创建一个名为'AccountLineItem '的实体
- 为'AccountLineItem '添加一个十进制字段
- 在'Account'和'AccountLineItem'之间创建一对多关联,确保勾选在'Account'上创建导航属性的选项
添加代码来更新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'
这行告诉我们
- 列名为Amount
- 数据类型为十进制
- 精度是18位可存储的数字,既可以存储在左边,也可以存储在右边小数点。
- 刻度是0位数字,可以存储在小数点右边。
,因此必须更改比例值以保存小数点右侧的数字。你不能使用EF
,你必须改变它从sql server管理工作室