一.概述

  本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序。使用迁移(migrations)基于数据模型创建数据库,是一种code first模式。可以在Windows 上使用 Visual Studio 2017,或在 Windows、macOS 或 Linux 上使用 .NET Core CLI 来学习。已经安装了NET Core 2.1 SDK,这里使用Visual Studio 2017和sql server 2012演示。

  1.1 创建新项目  

    (1) 打开 Visual Studio 2017

    (2) 选择 ASP.NET Core Web 应用程序。

    (3) 输入 EFGetStarted.AspNetCore.NewDb 作为名称。

    (4) 在新建 ASP.NET Core Web 应用程序 对话框中:

      确保在下拉列表中选择“.NET Core”和“ASP.NET Core 2.2”

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

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

    (5) 编译

       出错:“任务不支持“SharedCompilationId”参数。请确认该参数存在于此任务中” ,安装如下:

        PM> install-package  Microsoft.Net.Compilers

  1.2 安装 Entity Framework Core

    要安装 EF Core,需要把目标对象的 EF Core 数据库提供程序安装。本篇使用SQL Server数据库,需要安装 SQL Server 提供程序包。

    install-package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.

  1.3 创建模型

    右键单击“Models”文件夹,然后选择“添加”>“类。输入“Model.cs”作为名称。

    /// <summary>
/// 创建模型
/// using Microsoft.EntityFrameworkCore;
/// </summary>
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options)
: base(options)
{ } public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
} public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; } public ICollection<Post> Posts { get; set; }
} public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; } public int BlogId { get; set; }
public Blog Blog { get; set; }
}

  

  1.4 使用依赖注入注册上下文

    服务(例如 BloggingContext)在应用程序启动期间通过依赖关系注入进行注册。 需要这些服务的组件(如 MVC 控制器)可以通过向构造函数或属性添加相关参数来获得对应服务。

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

    上面通过services.AddDbContext< BloggingContext)服务注入到容器中,并使用UseSqlServer 连接方式。我在sql 2012中已手动建立了EFGetStarted.AspNetCore.NewDb库。在生产应用中,通常会将连接字符串放在配置文件或环境变量中。 为简单起见,本篇在代码中定义它。

  1.5 创建数据库

    以下步骤使用迁移Migration创建数据库。根据上面1.3以有的模型。在工具”>“NuGet 包管理器”>“包管理器控制台”,运行以下命令:

   PM> Add-Migration InitialCreate
The Entity Framework Core Package Manager Console Tools don't support PowerShell version 2.0. Upgrade to PowerShell version 3.0 or higher,
    restart Visual Studio, and try again.

  解决方案:https://blog.csdn.net/lilinoscar/article/details/81739770

    PM> Add-Migration InitialCreate
Microsoft.EntityFrameworkCore.Infrastructure[]
Entity Framework Core 2.2.-servicing- initialized 'BloggingContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer'
     with options: None
     To undo this action, use Remove-Migration.

      在vs 2017当前项目结构中查看,自动生成二个.cs类, 如下所示:

        

       PM> Update-Database

        

    Add-Migration 命令为迁移搭建基架,以便为模型创建一组初始表。 Update-Database 命令创建数据库并向其应用新的迁移。

  1.6 创建控制器

    生成 Blogs实体 控制器和视图。右键单击“控制器”文件夹,然后选择“添加”>“控制器”

   public class BlogsController : Controller
{ public BloggingContext BloggingContext { get; } public BlogsController(BloggingContext bloggingContext)
{
this.BloggingContext = bloggingContext;
} // GET: /<controller>/
public IActionResult Index()
{
return View();
} [HttpGet]
public IActionResult Create()
{
return View();
} [HttpPost]
public async Task<IActionResult> Create([Bind("Url")] Blog blog)
{
BloggingContext.Add<Blog>(blog);
await BloggingContext.SaveChangesAsync();
return View();
}
}

  

  1.7 创建视图

    新建视图,结构目录是:Views-- Blogs-- Create.cshtml

    @model EFGetStarted.AspNetCore.NewDb.Models.Blog;

    @{
<form asp-controller="Blogs" asp-action="Create" method="post" >
<p>
url: <input type="text" asp-for="Url" />
<input type="submit" value="Create" />
</p>
</form>
}

   演示如下,点击create按钮,异步调用后台控制器Blogs下的Create的HttpPost特性方法。插入一条数据到Blogs数据表中。

  参考文献:

    官方文档:ASP.NET Core 新建数据库

asp.net core 系列 20 EF基于数据模型创建数据库的更多相关文章

  1. (17)ASP.NET Core EF基于数据模型创建数据库

    1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序.使用迁移(Migrations)基于数据模型创建数据库,你可以在Windows上 ...

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

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

  3. asp.net core 系列 21 EF现有数据库进行反向工程

    一.概述 在上篇中使用EF基于数据模型创建数据库,  本篇继续使用 EF  基于数据库创建数据模型.  实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序.已有 ...

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

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

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

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

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

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

  7. asp.net core系列 27 EF模型配置(索引,备用键,继承)

    一.索引 索引是许多数据存储中的常见概念.虽然它们在数据存储中的实现可能会有所不同,但它们可用于更有效地基于列(或列集)进行查找.按照约定,用作外键每个属性 (或组的属性) 会自动创建索引.无法使用数 ...

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

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

  9. ASP.NET Core系列(二):创建第一个.Net Core 项目

    前面讲过 .NET Core简介及开发环境安装,本章会讲一讲ASP.NET Core 2.0的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zh ...

随机推荐

  1. react使用过程中常见问题

    目录 一.减小输入字符数 二.用props.children来引用位于前置标签和后置标签之间的内容 三.创建组件两条主要的途径 四.JSX属性采用驼峰式的大小写规则(即‘onClick’而非‘oncl ...

  2. ISP PIPLINE (十五) AF

    主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用). AF的大致原理就是检测图像锐度或者等价于锐度的参数,推动马达实现合焦或者对 ...

  3. [OC] 添加 pch 文件

    第一步: Xcode左上角 File - New - File, Other - PCH File 第二步, 在图中位置,写入 pch 的路径. 路径可以将 pch 文件拖入终端来得到.

  4. VS2017无法发现单元测试,不能运行单元测试的解决方案

    问题: 在VS2017中新建空的单元测试后,无法运行测试,即右键菜单的"运行测试"和"调试测试" 不能运行,在测试资源管理中也无法列出这个测试. 解决方案: 1 ...

  5. python学习笔记(4)

    .................................................................................................... ...

  6. VS之设置文件编码格式

    VS2012默认格式为 "GB2312-80",很多时候可能出现乱码情况,就是编码问题,如何在VS里修改呢? 文件->“高级保存选项 ”  选择gb2312

  7. vuex的一些学习

    刚开始学vuex看文档看的一脸懵逼,故而网上各种查找资料,视频去观看学习,虽然看了很多还是很蒙圈,最近看了一个讲vuex的视频还有一个 类似的简书文档从中学到了很多,慢慢理清了头绪,至此记录一下,共同 ...

  8. echarts-for-react 从新渲染数据

    <ReactEcharts option={option} notMerge={true}  style={{height: '600px', width: '100%'}} className ...

  9. mysql_Navicat数据库破解

    Navicat Premium 12.1.16.0安装与激活 Navicat Premium 12是一套数据库开发管理工具,支持连接 MySQL.Oracle等多种数据库,可以快速轻松地创建.管理和维 ...

  10. django 源码报错

    启动django ,一直提示一个 AttributeError: 'str' object has no attribute 'decode' 哥,查了一下午google,就怕是自己判断错了,最后在一 ...