原文 Adding a New Field

作者 Rick Anderson

翻译 谢炀(Kiler)

校对 许登洋(Seay)、高嵩(Jack)

在这个章节你将使用 Entity Framework Code First 迁移模型中新加的字段,从而将模型字段变更同步到数据库。

当你使用 EF Code First 模式自动创建一个数据库,Code First 模式添加到数据库的表将帮助你来跟踪数据库的数据结构是否和从它生成的模型类是同步的。如果不同步,EF 会抛出异常。这将有助于你在开发阶段就发现错误,否则可能要到运行时才能发现这个错误了(通过一个很隐蔽的错误信息)。

添加一个 Rating 字段到 Movie 模型

打开 Models/Movie.cs 文件,添加一个 Rating 属性:

public class Movie
{
public int ID { get; set; }
public string Title { get; set; } [Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
public string Rating { get; set; } //手动高亮
}

生成应用程序(Ctrl+Shift+B)。

因为你已经在 Movie 类添加了一个新的字段,你还需要更新绑定的白名单,这样这个新的属性将包括在内。为了 Create 和 Edit action 方法包含 Rating 属性需要更新 [Bind] 特性:

[Bind("ID,Title,ReleaseDate,Genre,Price,Rating")]

为了把这个字段显示出来你必须更新视图,在浏览器视图中创建或者编辑一个新的 Rating 属性。

编辑 /Views/Movies/Index.cshtml 文件并添加一个 Rating 字段:

<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.movies[0].Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.movies[0].Price)
</th>
<th>
@Html.DisplayNameFor(model => model.movies[0].ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.movies[0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.movies[0].Rating) <!--手工高亮-->
</th>
<th></th>
</tr>
<tbody>
@foreach (var item in Model.movies)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Rating) <!--手工高亮-->
</td>

更新 /Views/Movies/Create.cshtml 文件添加 Rating 字段。你可以从上一个 form group 拷贝/粘帖以便于让智能感知帮助你更新字段。智能感知参考 Tag Helpers。

应用程序无法工作,直到我们更新了数据库包含新的字段。如果你现在运行程序,你将得到下面的 SqlException :

你看到这个错误是因为更新过的 Movie 模型类与数据库中存在的 Movie 的结构是不同的。(数据库表中没有 Rating 列)

有以下几种方法解决这个错误:

  1. Entity Framework 可以基于新的模型类自动删除并重建数据库结构。在开发环节的早期阶段,当你在测试数据库上积极做开发的时候,这种方式是非常方便的;它可以同时让你快速地更新模型类和数据库结构。但是,缺点是你会丢失数据库中的现有的数据 —— 因此你不想在生产数据库中使用这种方法!使用初始化器自动完成数据库的初始化并填充测试数据,往往是开发应用程序的一个有效方式。

  2. 显式修改现有数据库的结构使得它与模型类相匹配。这种方法的好处是,你可以保留录入过的数据。你可以手动修改或通过执行一个自动创建的数据库更改脚本进行变更。

  3. 采用 Code First 迁移来更新数据库结构。

对于本教程,我们采用 Code First 迁移。

更新 SeedData 类以便于为新的的字段提供填充值。下面展示一个变更的例子,但是你可能希望将这个变更应用到每个 new Movie。

new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "R", //手动高亮
Price = 7.99M
},

生成解决方案,然后打开命令提示符。输入以下命令:

dotnet ef migrations add Rating
dotnet ef database update

migrations add 命令通知数据库迁移框架检查 Movie 模型是否与当前 Movie 数据库表结构一致,如果不一致,就会创建新的必要的代码把数据库迁移到新的模型。“Rating” 名字可以是任意的,只是用于迁移文件。对于迁移操作采用有意义的名字是有帮助的。

如果在数据库中删除所有记录,数据库将会被初始化并添加 Rating 字段。你可以在浏览器或者 SSOX ( 即SQL Server Object Explorer(SQL Server对象资源管理器),译者注)中点击删除链接。

运行应用程序并验证你可以用 Rating 字段 create/edit/display 电影。你还应该将 Rating 字段添加到 Edit、Details 和 Delete 视图模板中。

返回目录

ASP.NET Core 中文文档 第二章 指南(4.8)添加新的字段的更多相关文章

  1. ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图

    原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘) .张仁建(第二年.夏) .许登洋(Seay) .姚阿勇 ...

  2. ASP.NET Core 中文文档 第二章 指南(4.4)添加 Model

    原文:Adding a model 作者:Rick Anderson 翻译:娄宇(Lyrics) 校对:许登洋(Seay).孟帅洋(书缘).姚阿勇(Mr.Yao).夏申斌 在这一节里,你将添加一些类来 ...

  3. ASP.NET Core 中文文档 第二章 指南 (09) 使用 Swagger 生成 ASP.NET Web API 在线帮助测试文档

    原文:ASP.NET Web API Help Pages using Swagger 作者:Shayne Boyer 翻译:谢炀(kiler) 翻译:许登洋(Seay) 对于开发人员来说,构建一个消 ...

  4. ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

    原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...

  5. ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

    原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...

  6. ASP.NET Core 中文文档 第二章 指南(3)用 Visual Studio 发布一个 Azure 云 Web 应用程序

    原文:Getting Started 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘).刘怡(AlexLEWIS).何镇汐 设置开发环境 安装最新版本的 Azure S ...

  7. ASP.NET Core 中文文档 第二章 指南(4.1)ASP.NET Core MVC 与 Visual Studio 入门

    原文:Getting started with ASP.NET Core MVC and Visual Studio 作者:Rick Anderson 翻译:娄宇(Lyrics) 校对:刘怡(Alex ...

  8. ASP.NET Core 中文文档 第二章 指南(4.5)使用 SQL Server LocalDB

    原文:Working with SQL Server LocalDB 作者:Rick Anderson 翻译: 魏美娟(初见) 校对: 孟帅洋(书缘).张硕(Apple).许登洋(Seay) Appl ...

  9. ASP.NET Core 中文文档 第二章 指南(5) 在 Nano Server 上运行ASP.NET Core

    原文 ASP.NET Core on Nano Server 作者 Sourabh Shirhatti 翻译 娄宇(Lyrics) 校对 刘怡(AlexLEWIS).许登洋(Seay).谢炀(kile ...

  10. ASP.NET Core 中文文档 第二章 指南(8) 使用 dotnet watch 开发 ASP.NET Core 应用程序

    原文:Developing ASP.NET Core applications using dotnet watch 作者:Victor Hurdugaci 翻译:谢炀(Kiler) 校对:刘怡(Al ...

随机推荐

  1. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  2. AutoFac在项目中的应用

    技能大全:http://www.cnblogs.com/dunitian/p/4822808.html#skill 完整Demo:https://github.com/dunitian/LoTCode ...

  3. Dreamweaver 扩展开发:C-level extensibility and the JavaScript interpreter

    The C code in your library must interact with the Dreamweaver JavaScript interpreter at the followin ...

  4. 如何正确使用日志Log

    title: 如何正确使用日志Log date: 2015-01-08 12:54:46 categories: [Python] tags: [Python,log] --- 文章首发地址:http ...

  5. WebApi - 路由

    这段时间的博客打算和大家一起分享下webapi的使用和心得,主要原因是群里面有朋友说希望能有这方面的文章分享,随便自己也再回顾下:后面将会和大家分不同篇章来分享交流心得,希望各位多多扫码支持和点赞,谢 ...

  6. Linux学习之文件操作

    Linux,一起学习进步-    mkdir The mkdir command is used to create directories.It works like this: mkdir命令是用 ...

  7. 解读发布:.NET Core RC2 and .NET Core SDK Preview 1

    先看一下 .NET Core(包含 ASP.NET Core)的路线图: Beta6: 2015年7月27日 Beta7: 2015年9月2日 Beta8: 2015年10月15日 RC1: 2015 ...

  8. PHP 获取 特定时间范围 类

    目录  前序 用途 功能及事项 使用方法 代码及注释 前序: 总体来说,我更应该是一个 android 移动开发者,而不是一个 phper,如果说只做移动端的 APP ,我也不会学这么多,这 2年来, ...

  9. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  10. PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.

    PhpStorm和WAMP配置调试参数 问题描述: Error. Interpreter is not specified or invalid. Press “Fix” to edit your p ...