加入EF工具和执行初始迁移
在本节中,您将使用包管理器控制台(PMC):
- 添加实体框架核心工具包。这个包需要添加迁移和更新数据库。
- 添加一个初始迁移。
- 更新数据库的初始迁移。
从工具菜单中,选择NuGet包管理器>包管理器控制台。
PMC,输入以下命令:
PMC
Add-Migration Initial
Update-Database
忽略下面的错误消息,我们修复它在接下来的教程:
Microsoft.EntityFrameworkCore.Model.Validation[30000]
没有指定的小数类型列“价格”实体类型“电影”。这将导致默默地截断值如果他们不适应默认精度和等级。显式地指定SQL server列类型,可以容纳所有的值使用“ForHasColumnType()”。
PMC
Install-Package Microsoft.EntityFrameworkCore.Tools
Add-Migration Initial
Update-Database
注意:如果你收到的一个错误 Install-Package
命令,打开NuGet包管理器和搜索 Microsoft.EntityFrameworkCore.Tools
包中。这允许您安装包或检查是否已经安装。另外,看到CLI的方法如果你有PMC的问题。
的 Add-Migration
命令创建代码来创建初始数据库模式。中指定的模式是基于模型 DbContext
(数据/ MvcMovieContext。cs文件)。的 Initial
参数是用于迁移的名字。您可以使用任何名字,但按照惯例你选择一个名字,描述迁移。看到介绍了迁移为更多的信息。
的 Update-Database
命令运行 Up
在迁移/ <时间戳> _Initial方法。cs文件,创建数据库。
-
添加英孚的核心工具.csproj文件。
-
运行以下命令从控制台(在项目目录):
console
dotnet ef migrations add Initial
dotnet ef database update
如果你运行应用程序并得到错误:
text
-
SqlException: Cannot open database "Movie" requested by the login. The login failed. Login failed for user 'user name'.
你可能没有运行 dotnet ef database update
.
测试应用程序
-
运行应用程序并利用Mvc电影链接。
-
点击创建新的链接,创建一个电影。
-
你可能无法输入小数点或逗号
Price
字段。支持jQuery验证对于非英语地区,使用逗号(",")一个小数点,和非us - english日期格式,你必须采取措施全球化应用程序。https://github.com/aspnet/Docs/issues/4076和额外的资源为更多的信息。现在,仅仅输入整数10。
- 在一些地方你需要指定日期格式。参见下面突出显示的代码。
C#
using System;
using System.ComponentModel.DataAnnotations;
namespace MvcMovie.Models
{
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
}
我们会讨论 DataAnnotations
后面的教程。
利用创建将导致表单发布到服务器,电影信息保存在数据库中。应用重定向到/电影网址,显示新创建的电影信息。
创建两个影片条目。试着编辑的细节和删除链接,所有的功能。
C#
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
C#
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
上面突出显示的代码显示了电影被添加到数据库中依赖注入容器(在启动。cs文件)。 services.AddDbContext<MvcMovieContext>(options =>
指定要使用的数据库连接字符串。 =>
是一个λ运营商.
打开控制器/ MoviesController。cs文件并检查构造函数:
C#
public class MoviesController : Controller
{
private readonly MvcMovieContext _context;
public MoviesController(MvcMovieContext context)
{
_context = context;
}
构造函数使用依赖注入注入数据库上下文(MvcMovieContext
)到控制器。用于每个数据库上下文CRUD在控制器的方法。