博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一步步学习EF Core(1.DBFirst)
阅读量:7226 次
发布时间:2019-06-29

本文共 3710 字,大约阅读时间需要 12 分钟。

 

前言

很久没写博客了,因为真的很忙,终于空下来,打算学习一下EF Core顺便写个系列, 今天我们就来看看第一篇DBFirst.

 本文环境:VS2017  Win7  .NET Core1.1    EF Core1.1.2

正文

这里我们不讨论是用DBFirst好,还是CodeFirst高端..各有各自的用处和适用场景..

我们单纯的只是来使用这个DBFirst..

既然是DBFirst,那么在用DBFirst之前..首先你要有一个数据库(嗯,废话)

其次,如果你是Windows7系统 那么需要升级你的Windows PowerShell到3.0+的版本

然后你需要安装相关的工具包,从NuGet下载即可如下图:

为了方便你们复制..我列一下:

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

Microsoft.EntityFrameworkCore.Design

Microsoft.EntityFrameworkCore.SqlServer.Design

然后,我们在VS的工具选项中,选择NuGet包管理器,选择程序包管理控制台

输入命令行:

Scaffold-DbContext "这里输入你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer

就会生成一个Modles文件夹如图:

这里面就是你的上下文对象和相关的实体类了.

我们进到上下文对象,会发现自己的连接字符串是固化在这里面的,如图:

我们当然不能这么做,所以,请删除掉他.

下一步,我们使用Asp.net Core 来测试测试看能不能访问.

创建Core项目的流程,我就不说了

然后给你的Core项目用NuGet添加引用:Microsoft.EntityFrameworkCore.SqlServer和Microsoft.EntityFrameworkCore

在配置文件里添加数据库连接字符串:

"ConnectionStrings": {    "SchoolConnection": "Data Source=.;Initial Catalog=School_Test;User ID=**;Password=***;MultipleActiveResultSets=true"  }

然后我们在Startup中注入我们的上下文对象:

在ConfigureServices()方法中注入,代码如下:

 

public void ConfigureServices(IServiceCollection services)        {            // Add framework services.            //注入SignalR.(与本文无关,请无视)            services.AddSignalR(options =>            {                options.Hubs.EnableDetailedErrors = true;            });           //注入上下文对象            services.AddDbContext
(options => options.UseSqlServer(Configuration.GetConnectionString("SchoolConnection"))); services.AddMvc(); }

我们创建控制器,代码如下:

public class TestController : Controller    {        //构造函数注入上下文        private readonly School_TestContext _context;        public TestController(School_TestContext Context)        {            _context = Context;        }        public IActionResult ListView()        {            return View(_context.UserTable.ToList());        }    }

创建相应的视图如下:

@model IEnumerable
@{ ViewData["Title"] = "ListView"; Layout = "~/Views/Shared/_Layout.cshtml";}

ListView

Create New

@foreach (var item in Model) {
}
用户名 密码 ID 班级名
@Html.DisplayFor(modelItem => item.UserName) @Html.DisplayFor(modelItem => item.PassWord) @Html.DisplayFor(modelItem => item.Id) @Html.DisplayFor(modelItem => item.Class.ClassName) Edit | Details | Delete

运行代码,会报错.如下错误:

No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.

 

这是因为我们通过DBFirst生成的上下文并不能直接拿来注入使用.我们需要改造一下,给上下文添加构造函数,如下:

public School_TestContext(DbContextOptions options) :base(options)        {        }

然后在运行我们的代码.得到结果如下:

我们发现红框位置的作为关联表的班级名,并没有显示~,这个留待我们后面讲解.

转载于:https://www.cnblogs.com/GuZhenYin/p/6857413.html

你可能感兴趣的文章
邱怡轩:R中大规模矩阵的SVD与矩阵补全
查看>>
C++ Primer习题集(第5版)
查看>>
centos7 mysql 5.7 yum安装
查看>>
JSOUP简单应用
查看>>
Mysql,SqlServer,Oracle主键自动增长的设置
查看>>
开源 java CMS - FreeCMS2.3会员登录
查看>>
malloc(0)的返回值
查看>>
析构方法、克隆对象
查看>>
Python字符编码详解
查看>>
Android开发 Firebase动态链接打开APP
查看>>
基于 HTML5 Canvas 的 3D 模型贴图问题
查看>>
让技术不要成为“背锅侠”!
查看>>
dubbo源码分析系列——dubbo的SPI机制源码分析
查看>>
表格单元格td设置宽度无效的解决办法
查看>>
防止视频资源被下载
查看>>
都是并发惹的祸
查看>>
eclipse实现JavaWeb项目 增量打包
查看>>
面试题系列一之 程序生命周期
查看>>
设计模式——观察者模式:气象监测应用
查看>>
NSUserDefaults简介及如何使用 NSUserDefaults 存储自定义对象
查看>>