一.概述

  在上篇中使用EF基于数据模型创建数据库,  本篇继续使用 EF  基于数据库创建数据模型。  实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。

  1.1 创建新项目

打开 Visual Studio 2017

“文件”>“新建”>“项目...”

从左菜单中选择“已安装”>“Visual C#”>“Web”。

选择“ASP.NET Core Web 应用程序”项目模板

输入 EFGetStarted.AspNetCore.ExistingDb 作为名称(它必须完全匹配稍后在代码中使用的命名空间),再单击“确定”

等待“新建 ASP.NET Core Web 应用程序”对话框显示出来

确保目标框架下拉列表设置为 .NET Core,版本下拉列表设置为 ASP.NET Core 2.2

选择“Web 应用程序(模型视图控制器)”模板

确保将“身份验证”设置为“无身份验证”

单击“确定”

  

  1.2 安装 Entity Framework Core

    安装方法上篇以有介绍。 PM>  install-package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.0

  1.3 对模型实施反向工程

    基于现有数据库创建 EF 模型,选择“工具”–>“NuGet 包管理器”–>“包管理器控制台”。 运行以下命令(一条命令,排版是二行):

    PM> Scaffold-DbContext   "Data Source ={ip};Initial Catalog = EFGetStarted.AspNetCore.NewDb; User ID = hsr;Password =js*2015;" 
    Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

    可以通过将 -Tables 参数添加到上述命令来指定要为哪些表生成实体, 例如 -Tables Blogs,Posts。反向工程过程基于现有数据库的架构创建实体类 (Blogs.cs & Posts.cs) 和派生上下文 (EFGetStartedAspNetCoreNewDbContext.cs),上下文表示与数据库的会话,并允许查询和保存实体类的实例。命令自动生成如下实体类:

        

  1.4 通过依赖关系注入注册上下文

    在 Startup.cs 中注册并配置上下文。这里实现与上一篇一样。通过AddDbContext(...) 方法将EF上下文注册为服务。

        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;
}); /*
using EFGetStarted.AspNetCore.ExistingDb.Models;
using Microsoft.EntityFrameworkCore;
*/
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
var connection = "Data Source = {ip}; Initial Catalog = EFGetStarted.AspNetCore.NewDb; User ID = hsr;Password =js*2015;";
services.AddDbContext<EFGetStartedAspNetCoreNewDbContext>
(options => options.UseSqlServer(connection));
}

  1.5 创建控制器和视图    

    创建BlogsController控制器,在Index方法中读出数据,在视图Blogs/index下显示。

    public class BlogsController : Controller
{
public EFGetStartedAspNetCoreNewDbContext NewDbContext { get; }
public BlogsController(EFGetStartedAspNetCoreNewDbContext _NewDbContext)
{
this.NewDbContext = _NewDbContext;
} // GET: /<controller>/
public IActionResult Index()
{
var blogs = NewDbContext.Blogs.ToList();
return View(blogs);
}
}
<!--  index !-->
@model IList<Blogs> @{
foreach (var item in Model)
{
<p>"url:" @item.Url </p>
}
}

    在Blogs控制器的index中,通过EF查询出Blogs集合,通过View 重载方法返回一个集合对象 View(blogs), 在Blogs/index页,声明一个IList<Blogs>泛型对象,约定将自动把返回的数据映射到index页面的泛型对象上。如下所示:

  参考文献:

    官方资料:ASP.NET Core 现有数据库

asp.net core 系列 21 EF现有数据库进行反向工程的更多相关文章

  1. asp.net core系列 31 EF管理数据库架构--必备知识 反向工程

    一.   反向工程 反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC.对于其他开发环境,请选择.NET Core CLI工具( ...

  2. asp.net core系列 30 EF管理数据库架构--必备知识 迁移

    一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...

  3. asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)

    一.连接字符串 在上二篇中,ASP.NET Core 应用程序连接字符串是写死在ConfigureServices代码中,下面介绍通过配置来实现.连接字符串可以存储在 appsettings.json ...

  4. asp.net core系列 26 EF模型配置(实体关系)

    一.概述 EF实体关系定义了两个实体互相关联起来(主体实体和依赖实体的关系,对应数据库中主表和子表关系). 在关系型数据库中,这种表示是通过外键约束来体现.本篇主要讲一对多的关系.先了解下描述关系的术 ...

  5. asp.net core 系列 20 EF基于数据模型创建数据库

    一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种cod ...

  6. asp.net core系列 28 EF模型配置(字段,构造函数,拥有实体类型)

    一. 支持字段 EF允许读取或写入字段而不是一个属性.在使用实体类时,用面向对象的封装来限制或增强应用程序代码对数据访问的语义时,这可能很有用.无法使用数据注释配置.除了约定,还可以使用Fluent ...

  7. asp.net core系列 35 EF保存数据(2) -- EF系列结束

    一.事务 (1) 事务接着上篇继续讲完.如果使用了多种数据访问技术,来访问关系型数据库,则可能希望在这些不同技术所执行的操作之间共享事务.下面示例显示了如何在同一事务中执行 ADO.NET SqlCl ...

  8. asp.net core系列 34 EF保存数据(1)

    一. 基本数据 每个EF上下文实例都有一个 ChangeTracker(更改跟踪器),它负责跟踪需要写入数据库的更改. 当更改实体类的实例时(修改属性,删除实例,新建实例等),这些更改会记录在 Cha ...

  9. asp.net core系列 32 EF查询数据 必备知识(1)

    一.查询的工作原理 Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据. 通过 LINQ 可使用 C#(或你选择的其他 .NET 语言)基于派生上下文和实 ...

随机推荐

  1. 安装Manjaro KDE 18.04

    Manjaro 官网:https://www.manjaro.org/ 各版本ISO下载:https://www.manjaro.org/download/ XFCE,KDE和GNOME为旗舰版 同时 ...

  2. 【省选十连测之一】【线段树】【最小生成树之Kruskal】公路建设

    目录 题意 输入格式 输出格式 数据范围 思路 代码 题意 有n个点,m条双向道路,其中第条公路的两个端点是u[i],v[i],费用是c[i]. 现在给出q个询问,每次给定一个L和一个R,要求你只能够 ...

  3. selenium 打开新标签页(非窗口)

    如何利用webdriver打开多个标签页和链接呢,到处查找得到的往往只是如何打开标签页. 打开标签页很简单,浏览器打开标签页的快捷键是ctrl+t,那把ctrl+t的按键事件传入即可,很多种实现方式, ...

  4. Android应用程序的结构和解析

    什么是Android应用程序的构成? Android应用程序的各个组件又是什么? 各个组件和AndroidManifest之间的关系是什么? Android应用程序由松散耦合的组件组成,并使用应用程序 ...

  5. 12-JSP&EL&JSTL

    JSP & EL & JSTL jsp Java Server Page 什么是jsp 从用户角度看待 ,就是是一个网页 , 从程序员角度看待 , 其实是一个java类, 它继承了se ...

  6. sass快速入门

    sass十分钟入门 变量 sass中可以定义变量,方便统一修改和维护. //sass style //----------------------------------- $fontStack: H ...

  7. 微信公众平台测试号 “微信登录失败,redirect_uri域名与后台配置不一致,错误代码10003”

    设置"网页授权获取用户基本信息" 点击"修改" 弹出"OAuth2.0网页授权",注意域名不加"https://"或&q ...

  8. 查找datatable 中的重复记录(只查询一个字段)

    StringBuilder str = new StringBuilder(); var res = new ResParameter() { code = ResponseCode.exceptio ...

  9. 获取用户在web页面上选中的文本

    window.getSelection().toString();

  10. .net Core 2.0应用程序发布到IIS上注意事项

    .net Core2.0应用程序发布window服务器报错容易错过的配置. 1.应用程序发布. 2.IIS上新建网站. 3.应用程序池选择无托管代码. 4.服务器上安装DotNetCore.1.0.1 ...