ASP.NET Core 中用 EF Core 以现有数据库建MVC程序


 

前提: 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  进入编辑。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM