分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

使用.Net Core+EF7 CodeFirst(2)

发布时间:2023-09-06 01:32责任编辑:白小东关键词:暂无标签

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

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

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

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

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

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

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

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

1 {2 ??"Logging": {3 ????"IncludeScopes": true,4 ????"LogLevel": {5 ??????"Default": "Warning"6 ????}7 ??},8 ??"ConStr": "server=.;Database=DBCodeFirst;uid=sa;pwd=12346"9 }

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

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

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

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

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

然后新建一个类Config

 1 using Microsoft.Extensions.Configuration; 2 using Microsoft.Extensions.DependencyInjection; 3 using Microsoft.Extensions.Options; 4 using System; 5 using System.Diagnostics; 6 ?7 namespace Common 8 { 9 ????/// <summary>10 ????/// 配置类11 ????/// </summary>12 ????public class Config13 ????{14 ????????/// <summary>15 ????????/// 所有的配置数据16 ????????/// </summary>17 ????????private static IConfigurationRoot Configuration { get; set; }18 19 ????????/// <summary>20 ????????/// 获得数据21 ????????/// </summary>22 ????????/// <param name="_Configuration"></param>23 ????????public static void SetConfig(IConfigurationRoot _Configuration)24 ????????{25 ????????????Configuration = _Configuration;26 ????????}27 28 ????????/// <summary>29 ????????/// 返回对应键的值30 ????????/// </summary>31 ????????/// <typeparam name="T"></typeparam>32 ????????/// <param name="key">键</param>33 ????????/// <param name="def">默认值</param>34 ????????/// <returns></returns>35 ????????public static T GetVal<T>(string key, T def = default(T))36 ????????{37 ????????????try38 ????????????{39 ????????????????def = (T)Convert.ChangeType(Configuration.GetSection(key).Value, typeof(T));40 ????????????}41 ????????????catch (Exception e)42 ????????????{43 ????????????????Debug.WriteLine(e.Message);44 ????????????}45 ????????????return def;46 ????????}47 48 ????}49 50 }

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

1 ????????public Startup(IConfiguration configuration)2 ????????{3 ????????????IConfigurationRoot config = new ConfigurationBuilder()4 ??????????????????.SetBasePath(Directory.GetCurrentDirectory())5 ??????????????????.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)6 ??????????????????.Build();7 8 ????????????Config.SetConfig(config);9 ????????}

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

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

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

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

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

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

这一段主要是吐槽,,

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

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

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

1 ????????public IActionResult Index()2 ????????{3 ????????????DBCodeFirst db = new DBCodeFirst();4 ????????????db.DT_User.Add(new DT_User { UserName = "嘿嘿" });5 ????????????var count = db.SaveChanges();7 ????????????return View();8 9 ????????}

他丫的给我报错,,,

翻译过来就是这个,,

没有数据库提供商已为这个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)

原文地址:http://www.cnblogs.com/Onlooker/p/8097588.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved