上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库,

其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,,

1.读取配置文件,获得链接字符串

2.使用数据库进行增删查改

3.实体类更新后,数据库也更新

一、读取配置文件,获得链接字符串

上一篇我们的链接字符串是这样写的

直接写在程序里面是非常非常不好的行为,所以我很简单粗暴的丢到appsettings.json这个配置文件里面去了,,

 {
"Logging": {
"IncludeScopes": true,
"LogLevel": {
"Default": "Warning"
}
},
"ConStr": "server=.;Database=DBCodeFirst;uid=sa;pwd=12346"
}

接下来,要愁的是怎么把配置读出来,而且,既然是配置文件,肯定整个项目都要用上,肯定是要封装起来的,

网上也找了很多啊,各种各样的, 有些大佬还可以直接读取成一个对象,这里我不搞那些骚操作啊,,,emmm,不会告诉你们我看不懂的

走最简单的,键值对,就像以前读取webconfig文件一样,

首先需要引用三个包,直接右键编辑commom.csproj

     <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.0" />

然后新建一个类Config

 using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Diagnostics; namespace Common
{
/// <summary>
/// 配置类
/// </summary>
public class Config
{
/// <summary>
/// 所有的配置数据
/// </summary>
private static IConfigurationRoot Configuration { get; set; } /// <summary>
/// 获得数据
/// </summary>
/// <param name="_Configuration"></param>
public static void SetConfig(IConfigurationRoot _Configuration)
{
Configuration = _Configuration;
} /// <summary>
/// 返回对应键的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="def">默认值</param>
/// <returns></returns>
public static T GetVal<T>(string key, T def = default(T))
{
try
{
def = (T)Convert.ChangeType(Configuration.GetSection(key).Value, typeof(T));
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
}
return def;
} } }

然后还要进行一下配置,在Startup.cs文件的Startup方法改造一下:

         public Startup(IConfiguration configuration)
{
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build(); Config.SetConfig(config);
}

使用方法很简单的,一句话就好:

         // 数据库连接字符串
string conStr = Config.GetVal<string>("ConStr");

因为现在的配置文件是json格式,所以,层级结构是肯定会有的,比如说,我现在要读取Logging下的IncludeScopes值,可以这样写:

          string IncludeScopes = Config.GetVal<string>("Logging:IncludeScopes");

以此类推,,,这样肯定没其他大佬们直接读取成对象来得快,不过好在简单易懂,以后等我学会了那种高大上的方法再来分享,,现在先就酱紫用着,,

二、使用数据库进行增删查改

这一段主要是吐槽,,

以前我们使用EF,不管是DBFirst还是CodeFirst,亦或者ModelFirst,要使用数据库都是很简单粗暴的new一个上下文对象

1    // 数据库上下文
2 var DB=new DBCodeFirst();

然鹅!!!!!!!当我用CodeFirst把数据库生成以后,喜滋滋的跑过去加一条测试数据,

         public IActionResult Index()
{
DBCodeFirst db = new DBCodeFirst();
db.DT_User.Add(new DT_User { UserName = "嘿嘿" });
var count = db.SaveChanges(); return View(); }

他丫的给我报错,,,

翻译过来就是这个,,

没有数据库提供商已为这个DbContext。
一个供应商可以通过重写dbcontext.onconfiguring方法或使用adddbcontext对应用服务提供商配置。
如果adddbcontext使用,并确保你的DbContext类型构造函数接受dbcontextoptions < tcontext >对象并将其传递给DbContext基构造函数。”

反正我是没看懂的,,,永远不知道当时我的心情是多么的难受,

又是一阵百度啊,可算是被我找到解决方法了,,,得这样写:

讲真,我还没接触到依赖注入,所以这段代码看的是有点懵逼的,

好像关联的是Startup这个类里面的ConfigureServices方法,哪位大佬有兴致的话可以给我留言讲讲,感激不尽

不过好歹是可以用数据库了,,下一步是搭一个三层,,一筹莫展ing,,,

以前是可以直接new上下文,现在不行了,还不知道这个依赖注入能不能在其他层使用,,

等我把三层整出来之后,再写出来分享吧,,估计是下一篇了

三.实体类更新后,数据库也更新

这个的话首先回顾上一篇啊,

在上一篇里面用了两个命令来生成数据库(DBLog我改成Init了,,这个随意,,)

 Add-Migration Init

Update-DataBase Init

如果在上下文中加了实体类或者修改了实体类字段,我们肯定是要更新数据库的,

这个时候,我们在已经生成数据库和Migrations文件夹的前提下,继续使用上面的两个命令

不过这个时候要稍稍改动:

Add-Migration UpData

Update-DataBase UpData

记得每次使用的时候,最后一个参数名称千万不能一样

就像我第一次使用的名称是Init 第一次更新数据库的时候,使用的是UpData

以后肯定还会有更多的更新,每次都不能一样,比如:UpData01、UpData02、UpData03、...

同时Migrations文档会对应的增加内容

数据库自动生成的__EFMigrationsHistory表中也会有我们的数据库迁移记录

emmm,差不多就这些吧,,,

我还得想办法把三层整出来,,,,脸滚键盘.gif

使用.Net Core+EF7 CodeFirst(2)的更多相关文章

  1. 使用.Net Core+EF7 完成CodeFirst

    emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的, 然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑... 本来想着,应 ...

  2. EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型

    官方教程:https://docs.microsoft.com/en-us/aspnet/core/data/?view=aspnetcore-2.1 使用EF CodeFirst在MySql中创建新 ...

  3. .net core EFCore CodeFirst 迁移出现错误【No project was found. Change the current working directory or use the --project option. 】

    PM> dotnet ef Migrations add Init No project was found. Change the current working directory or u ...

  4. .net core mysql CodeFirst

    创建两个项目 1.网站 2.Model层 引用DLL Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Design Micros ...

  5. 在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发

    在.net core开发过程中,使用最多的就是注入方法.但是在.net core使用PetaPoco时,PetaPoco还不支持进行注入方式进行处理一些问题. 今天对PetaPoco进行了一些扩展,可 ...

  6. 【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表,通过 控制台 和 dotnet ef 两种 ...

  7. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...

  8. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 Entity Framework Core Nuget包管理 如果你创建项目的时候启用了个人身份验证的话,项目中就已经包含了EFCo ...

  9. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-3

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 创建.查询.更新.删除 这章主要讲解使用EF完成 增删改查的功能. 自定义"详情信息"页面 我们通过基架生成的代 ...

随机推荐

  1. ueditor插入百度音乐无法播放-403 问题

    简单记录一下,其实403是因为百度音乐设置了禁止外部连接引用,因此 几乎所有的百度音乐播放都会提示403. 注意:预览页面(dialog/music/music.html)和实际插入页面(uedito ...

  2. 微服务下的契约测试(CDC)解读

    1. 前言 有近两周没有在公众号中发表文章了,看过我之前公众号的读者都知道,公众号中近期在连载<RobotFramework接口自动化系列课程>,原本计划每周更新一篇,最近由于博主在带一个 ...

  3. java.io.File类操作

    一.java.io.File类 String path="E:/222/aaa";//路径 String path1="aaa.txt"; File file= ...

  4. [转载] 高性能IO模型浅析

    转载自http://www.cnblogs.com/fanzhidongyzby/p/4098546.html 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(B ...

  5. 使用flex

    Flex如何处理二义性模式: 1.词法分析器匹配输入时匹配尽可能多的字符串 2.如果两个模式都可以匹配的话,匹配在程序中更早出现的模式 上下文相关的记号 flex提供起始状态(start state) ...

  6. (转)从史上八大MySQL宕机事故中学到的经验

    一.Percona网站宕机事件 震级:3 发生时长:2011年7月11日 持续时长:数日 地点:加州Pleasanton(幸福屯) 宕机原因:Percona网站主服务器上的3块硬盘损坏,同时因为人员变 ...

  7. 【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说

    大家好,好久不见,今天我们来一起学习一下关于Spring框架的IOC技术. 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的 ...

  8. Golang源码探索(三) GC的实现原理

    Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短. 停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服 ...

  9. 《java.util.concurrent 包源码阅读》22 Fork/Join框架的初体验

    JDK7引入了Fork/Join框架,所谓Fork/Join框架,个人解释:Fork分解任务成独立的子任务,用多线程去执行这些子任务,Join合并子任务的结果.这样就能使用多线程的方式来执行一个任务. ...

  10. 安装memcached

    简介 memcached是免费和开放源代码的高性能分布式内存对象缓存系统,旨在通过减轻数据库负载来加速动态Web应用程序.其有以下特点: 基于简单的文本行协议 全部数据按照k/v形式存放在内存中,无持 ...