前提: vs的版本:Visual Studio 2017 15.3 如果不是,请运行 vs_enterprise__260723143.1491650802.exe 升级vs为最新版本。
1. 建立数据库
在SQL 中新建查询,输入下面命令并执行。此命令将建立数据库和表,并录入三条数据。
CREATE DATABASE [Blogging];
GO
USE [Blogging];
GO
CREATE TABLE [Blog] (
[BlogId] int NOT NULL IDENTITY,
[Url] nvarchar(max) NOT NULL,
CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId])
);
GO
CREATE TABLE [Post] (
[PostId] int NOT NULL IDENTITY,
[BlogId] int NOT NULL,
[Content] nvarchar(max),
[Title] nvarchar(max),
CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]),
CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE
);
GO
INSERT INTO [Blog] (Url) VALUES
('http://blogs.msdn.com/dotnet'),
('http://blogs.msdn.com/webdev'),
('http://blogs.msdn.com/visualstudio')
GO
2. 打开vs2017,新建项目(按下面两图设置并确定)
Open Visual Studio 2017
- File -> New -> Project...
- From the left menu select Installed -> Templates -> Visual C# -> Web
- Select the ASP.NET Core Web Application (.NET Core) project template
- Enter EFGetStarted.AspNetCore.ExistingDb as the name and click OK
Wait for the New ASP.NET Core Web Application dialog to appear
- Under ASP.NET Core Templates 2.0 select the Web Application (Model-View-Controller)
- Ensure that Authentication is set to No Authentication
- Click OK
如此,项目模板就会自动生成,可以添加自己的代码了。
3. 安装项目实体模型包,以便使得项目支持从现有数据库自动生成数据库类。
菜单项选 工具-->NeGet包管理器-->程序包管理器控制台 单击选定
在下面的命令窗口输入3个命令并分别执行:
1) Install-Package Microsoft.EntityFrameworkCore.SqlServer
2)Install-Package Microsoft.EntityFrameworkCore.Tools
3)Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design
继续在命令窗口输入下面命令,连接你的数据库并根据你的数据库自动生成数据库模型类。
Scaffold-DbContext "Server=(localdb)\MSSQLLocalDB;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
解释一下: (localdb)\MSSQLLocalDB 是数据库服务器的名称,Blogging是数据库的名字。Models 是生成的数据库类文件存放的文件夹。
如此,Models文件夹下就会自动生成数据库模型类的文件了。
帮助信息:在Pack Manager Console中于运行如下命令:
Scaffold-DbContext "{Your DB connect string}" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
{Your DB connect string}:你的数据库连接字符串
Microsoft.EntityFrameworkCore.SqlServer:目标数据库为Sql Server
-OutputDir Models: 生成的文件的存放目录,目前目录是根目录下的Models目录
可以加上 -Force 命令,覆盖已有数据库类文件。或加上参数 -Tables Blog,Post 生成指定的表的类。
语法:
Scaffold-DbContext [-Connection] <String> [-Provider] <String> [-OutputDir <String>] [-Context <String>] [-Schemas <String[]>] [-Tables <String[]>] [-DataAnnotations] [
-Force] [-Project <String>] [-StartupProject <String>] [<CommonParameters>]
可输入 Scaffold-DbContext -? 选N查看帮助
Install Entity Framework
To use EF Core, install the package for the database provider(s) you want to target. This walkthrough uses SQL Server. For a list of available providers see Database Providers.
-
Tools > NuGet Package Manager > Package Manager Console
-
Run
Install-Package Microsoft.EntityFrameworkCore.SqlServer
We will be using some Entity Framework Tools to create a model from the database. So we will install the tools package as well:
- Run
Install-Package Microsoft.EntityFrameworkCore.Tools
We will be using some ASP.NET Core Scaffolding tools to create controllers and views later on. So we will install this design package as well:
- Run
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design
4. 修改startup.cs,用依赖注入注册数据库类
修改配置文件Startup.cs.
- 打开
Models\BloggingContext.cs
- 删除
OnConfiguring(...)
方法 - 增加如下方法: public BloggingContext(DbContextOptions<BloggingContext> options) : base(options) { }
- 打开 startup.cs 增加如下代码:
using EFGetStarted.AspNetCore.ExistingDb.Models;
using Microsoft.EntityFrameworkCore;
用下面替换原同名方法:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var connection = @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
}
OK,大致搞定。 先编译一下。
5. 创建一个控制器
在解决方案中右单击 Controllers 文件夹,选择 添加 -> 控制器... 选择视图使用 Entity Framework 的MVC控制器 单击 确定
接着在弹出窗口中选择 Model class 为 Blog , 上下文为 BloggingContext 点击 确定
6. 运行程序
单击 绿箭头 运行,在出现的主页的地址后加上 /Blogs 回车
基本搞定。
打开_layout.cshtml 替换
<a asp-area="" asp-controller="Blogs" asp-action="Index" class="navbar-brand">EFGetStarted.AspNetCore.ExistingDb</a>
中的Home 为 Blogs , 重新运行程序,单击 EFGetstarted 进入编辑。