MVC神韵---你想在哪解脱!(十四)-程序员宅基地

技术标签: 测试  数据库  

修正票价字段的精度

前面我们追加数据的时候遗留下来一个问题,就是在追加数据的时候,票价(Price)字段中输入的是9.99元,但是电影清单显示画面中该数据的票价字段显示为10元,这是为什么?这个问题发生的原因是因为,当EF code-first在创建数据表的时候,如果字段为Decimal类型,则使用默认的精度(18:0),从而使得9.99元被四舍五入成为10元。现在我们想要将这个默认的精度修改为(18:2),从而使得数据表中的票价字段能够存储小数点后的两位数字。可喜的是EF code-first允许你很容易地重载这个定义模型如何向数据库中存取数据的映射规则。你可以利用这个重载机制来重载EF code-first中默认的类型定义以及数据表的继承规则,然后在这个基础上进行数据的存取。为了改变我们的票价(Price)字段在数据表中的精度,打开Models文件夹下的Movie.cs文件。追加一句引用System.Data.Entity.ModelConfiguration的语句,代码如下:

using System.Data.Entity.ModelConfiguration;

并在MovieDBContext类中重载OnModelCreating方法,代码如下所示:

public class MovieDBContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }
 
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    modelBuilder.Entity<Movie>().Property(p => p.Price).HasPrecision(18, 2);
    }
}
View Code

OnModelCreating方法可以被用来重载与定制规定我们的模型类如何与我们的数据表,进行映射的映射规则。代码中使用了EF的ModelBuilder API来定义我们的Movie对象的票价(Price)字段的精度为准确到小数点后两位。

现在完整的Movie.cs中的代码如下所示:

using System;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
namespace MvcMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
        public string Rating { get; set; }
    }
    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Movie>().Property(p =>p.Price).HasPrecision(18, 2);
        }
     }
}
View Code

现在让我们重新运行应用程序,在浏览器中输入“http://localhost:xx/Movies”。当应用程序启动的时候,EF code-first将会再次察觉我们的模型类中的结构与数据表的结构不再匹配,然后自动重建数据表与新的模型类的结构进行匹配(具有新的票价(Price)字段的精度)。重新创建一个新的电影(Movie)数据,在票价(Price)字段中输入9.99。请注意数据表中保存后显示在电影清单画面中的该条数据的票价(Price)字段中现在也显示为9.99了,如图所示:

本节介绍了如何快速调整你的模型对象,同时在改变模型类的结构时自动将数据表中的结构保持同步。我们也介绍了如何预先在自动重建的数据表中追加默认数据,它使得你可以快速在数据表中追加一些测试数据。在下一节中,我们将介绍如何在我们的模型类中加入我们自定义的数据有效性校验规则,从而强制实现一些业务规则。

另注:4.0以后的EFramework已经不存在该精度错误。所以越来越好了,嘻嘻。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/sonykings/p/3307825.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30295091/article/details/97600451

智能推荐

远程关闭Windows 2008服务器_berryreload shutdown site:csdn.net-程序员宅基地

文章浏览阅读2.9k次。其中af007是我的Windows 2008服务器主机名命令分两部分,第一步是登录远程Windows 2008服务器(否则第二步会报错access denied),第二步关机。net use \\af007\IPC$ mypassword /USER:Administratorshutdown /s -m \\af007参考:官方参考:http://technet.microsoft.com/en_berryreload shutdown site:csdn.net

Python中出现:RunTimeError:implement_array_function method already has a docstring.异常解决_pandas 1.1.2 numpy 1.18.1 runtimeerror:implement_a-程序员宅基地

文章浏览阅读2w次,点赞2次,收藏2次。QUESTON:Python中出现:RunTimeError:implement_array_function method already has a docstring.异常解决ANSWER:在网上查了一上午,发现写的在我这都没有解决问题,于是我费尽心机自己动手解决。我在cmd命令行将本机上的numpy卸载后,重新安装到最新版本,可能是由于版本与某些库不兼容。Python..._pandas 1.1.2 numpy 1.18.1 runtimeerror:implement_array_function method alrea

Basys3 FPGA 3-8译码器开发及应用_使用vivado设计3线—8线译码器,并在basys 3开发板上实现其功能。 1. 实验程序记录-程序员宅基地

文章浏览阅读2.9k次。实验3 3-8译码器开发及应用实验目的:1 学习 Verilog HDL 基本语法2 巩固 Vivado 2014.2 环境下的 Verilog HDL 编程设计的基础。实验设备: XILINX BASYS3实验步骤:1 打开vivado。2 点create new project 进入新建工程向导3 输入project名称,并选择存储地址,注意_使用vivado设计3线—8线译码器,并在basys 3开发板上实现其功能。 1. 实验程序记录

POJ 3974 Palindrome(Manacher)_palindrome manacher-程序员宅基地

文章浏览阅读560次。PalindromeDescriptionAndy the smart computer science student was attending an algorithms class when the professor asked the students a simple question, "Can you propose an efficient algori_palindrome manacher

安装eclipse时 提示The Eclipse executable launcher was unable to locate its companion (可执行程序无法找到其同伴共享库)-程序员宅基地

文章浏览阅读2w次,点赞6次,收藏25次。操作系统:win7The Eclipse executable launcher was unableto locate its companion shared library译:Eclipse出现可执行程序无法找到其同伴共享库一、打开eclipse目录下的配置文件eclipse.ini。 二、将--launcher.library和-startup下面的路径都改为当前的正确..._the eclipse executable launcher was unable to locate its companion shared li

手机开热点,电脑连,关于两个局域网的问题_电脑和手机不在一个局域网-程序员宅基地

文章浏览阅读1.9w次。针对情况:手机开的4g,开wifi,电脑连手机的热点 原理:电脑会有一个局域网的ip 1.在运行中输入cmd,在dos窗口下输入ipconfig,找到这一行2.测试 : 手机的浏览器上,输入172.20.10.5加上一个端口号去访问你电脑上开启的应用,就可以了。。。(这是手机的浏览器访问电脑的应用,我这里是xBuilder)..._电脑和手机不在一个局域网

随便推点

C/C++优秀书籍清单_c/c++ 软件架构书籍-程序员宅基地

文章浏览阅读593次。转载自:https://www.cnblogs.com/kimiway/p/3225767.html书籍是码农进步的阶梯. 读好书,好读书. 干一行爱一行, 除了工作还有生活, 在陪伴家人同时,也不忘提高自己, 为更好的生活努力...1.C程序设计语言 第二版 工作几年了, 每次回头看都会有新的收获.2.C++程序设计语言(特别版) 换工作前都会看看, 水很深..._c/c++ 软件架构书籍

让我崩溃的vs2008····_dwm.exe崩溃-程序员宅基地

文章浏览阅读760次。 我的机子装的是win2008,纯粹的当作个人桌面版使用。以前就听过vs大名,但总的说给我感觉是它是个胖子,臃肿的胖子。所以一直没兴趣安装,其实主要是还没学到和它有关挂钩的东西··· 但我近期在学网页制作的一些知识,学校这学期开了vb这门课。于是我便打算安装vs2008用。 vs2008在安装过程中就挺让我崩溃的,别人的机子我不知道,但在我这台机子上安装,那时间---长_dwm.exe崩溃

IT人事面试及应对_it面试也是应试-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏34次。1、请你自我介绍一下你自己?回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回..._it面试也是应试

怎样恢复计算机程序打开文件名,Word提示如何解决使用文本恢复转换器打开文件的问题...-程序员宅基地

文章浏览阅读855次。使用“文本恢复转换器2113”首先打开单词5261(找到任何未损坏的word文档以打开),然后在4102中单击“工具”→“选项1653”→在“常规”选项卡中,找到“打开时确认转换”并选择它,然后单击“确定”退出,然后单击“文件”-“打开”,找到您需要修复的文件,单击选择(请不要双击直接打开它),在右下角有一个“打开”按钮是否找到了黑色的小三角形?在下图中红点的位置。单击它,然后选择“打开并修复”选..._怎么还原文件用计算机程序名称

分享安卓手机里的钢琴键盘模拟器给大家_钢琴键盘模拟器安卓-程序员宅基地

文章浏览阅读1.8k次。安卓手机里的钢琴键盘模拟器,对于我们模拟练习钢琴非常有用。我们先打开手机,然后启动手机桌面上的【钢琴键盘模拟器】今天就和大家分享一下。点 击【钢琴键盘模拟器】的图标,进入可操作界面。这时候会制动跳转到手机横屏界面。我们可以看到在操作界面里有模拟钢琴的黑白键盘。同时在钢琴键盘模拟器的操作界面里,我们点击“加号”“减号”按钮可以调节黑白键盘的大小比例。  可以选择在钢琴键盘模拟器的操作界面里自己录..._钢琴键盘模拟器安卓

英文视频字幕自动生成_生成英文字幕-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏25次。笔者正在制作少儿编程教育系列视频,发现有大量的英文视频资料值得学习,但是视频中缺少字幕,可能会对学生的学习过程带来困扰。如果能够得到英文字幕,再通过谷歌翻译等工具的使用,就可以进一步生成中文字幕。因此,开始探索快速生成字幕的方法,本文对实现过程进行记录,笔者的计算机使用的是Windows 10 64位操作系统。注:需要计算机通过某些方法成功访问谷歌!整体流程可划分为:安装Python2下..._生成英文字幕

推荐文章

热门文章

相关标签