.netcore mysql_.netcore基于mysql的codefirst

.netcore基于mysql的codefirst

此文仅是对于netcore基于mysql的简单的codefirst实现的简单记录。示例为客服系统消息模板的增删改查实现

第一步、创建实体项目,并在其中建立对应的实体类,以及数据库访问类

须引入Pomelo.EntityFrameworkCore.MySql和Microsoft.EntityFrameworkCore

///

///消息模板///

public classMessatgeTemplate

{///

///id///

[Key]public System.Guid Id { get; set; }///

///名称///

[MaxLength(250)]public string Name { get; set; }///

///关键字///

[MaxLength(500)]public string Keywords { get; set; }///

///内容///

public string Content { get; set; }///

///语言///

[MaxLength(80)]public string CultureCode { get; set; }///

///类别///

[MaxLength(250)]public string Category { get; set; }///

///备注信息///

public string Remark { get; set; }///

///是否启用///

public bool Enabled { get; set; }///

///创建时间///

public DateTime Created { get; set; }///

///最近修改时间///

public DateTime LastModified { get; set; }

}

///

///

///

public classCustomerServiceContext : DbContext

{public CustomerServiceContext(DbContextOptionsoptions)

:base(options)

{

}///

///配置///

///

protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)

{base.OnConfiguring(optionsBuilder);

}public virtual DbSet MessatgeTemplate { get; set; }

}

第二步、创建业务服务项目,添加对应的业务处理类

///

///客服业务统一接口///

public interfaceICustomerServicerSerice

{

}

///

///模板业务类///

public classMessageTemplateService : ICustomerServicerSerice

{privateCustomerServiceContext _CustomerServiceContext;publicMessageTemplateService(CustomerServiceContext customerServiceContext)

{this._CustomerServiceContext =customerServiceContext;

}///

///创建模板///

public voidCreateMessageTemplate()

{//todo create

}///

///修改模板///

public voidModifyMessageTemplate()

{//TODO modified

}///

///获取模板///

///

public ListGetMessageTemplate()

{//TODO根据传入参数查询模板

return null;

}///

///删除///

public voidDeleteMessageTemplate(Guid id)

{var template = _CustomerServiceContext.MessatgeTemplate.FirstOrDefault(p => p.Id ==id);if (template != null)

{

_CustomerServiceContext.MessatgeTemplate.Remove(template);

_CustomerServiceContext.SaveChanges();

}

}///

///批量设置是否可用///

///

///

public void BatchEnableTemplate(List ids, boolenabled)

{//TODO set enabled

}

}

第三步、创建webapi项目,并在其中建立对应的实体类,以及数据库访问类

须引入Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.Design.

1、在appsettings.json中配置数据连接

"ConnectionStrings": {"CumstomerServiceConnection": "server=localhost;port=3306;database=CustomerServiceCenter;uid=root;pwd=root23456;CharSet=utf8"}

2、修改startup.cs类的ConfigureServices注入db访问类

services.AddDbContext(p => p.UseMySql(Configuration.GetConnectionString("CumstomerServiceConnection")));

3、设置该webapi项目为启动项目,在nuget程序包控制台选择第一步中创建的实体类项目依次运行如下脚本创建数据库

1)add-migration init

2) update-database

上面的两个命令中,add-migration表示添加数据迁移,其实就是将实体变更转换成sql(add-migraion后面的init只是个名称,可以自行定义),update-database是将生成的数据迁移信息更新到数据库

另外一些可能用到的命令

remove-migration  ---将最近生成的迁移(没有更新到数据库的)移除掉

script-migration --生成数据库迁移相应的脚本

------------------------

命令执行成功后,就可以在数据库中找到创建好的数据库和表了

821f97680989b87686b103b3486a9a30.png

script-datatable可以生成数据库脚本语句

a26f74de4085f123a4daeb05bdcc8f15.png

好了,以上就完成了codefirst的简单操作了。不过跟着第二步的业务类其实没啥关系!!!如果只是进行数据迁移确实没有service层什么事,但是业务逻辑要走通,实现crud,业务层还是必须的。

---------------------------------------------------------------------------------------------------------------------

以下就顺带写下controller中引入service,实现简单的删除业务逻辑(其它的业务逻辑---略)

在webapi创建MessageTemplateController

[Route("api/[controller]")]

[ApiController]public classMessageTemplateController : ControllerBase

{privateMessageTemplateService _MessageTemplateService;publicMessageTemplateController(MessageTemplateService messageTemplateService)

{this._MessageTemplateService =messageTemplateService;

}///

///删除///

///

[HttpPost("DeleteMessageTemplate")]public voidDeleteMessageTemplate(Guid id)

{

_MessageTemplateService.DeleteMessageTemplate(id);

}//TODO其他操作:查询,新增,修改等

}

修改Startup.cs类,注入服务

public voidConfigureServices(IServiceCollection services)

{

services.AddControllers();

services.AddDbContext(p => p.UseMySql(Configuration.GetConnectionString("CumstomerServiceConnection")));#region 注入业务服务Assembly assembly= Assembly.Load("Qingy.DotNetCoreStudy.CustomerServiceService");

List types = assembly.GetTypes().Where(u => u.IsClass && !u.IsAbstract && !u.IsGenericType&& u.GetInterfaces().Any(p => p == typeof(ICustomerServicerSerice))

).ToList();foreach (var item intypes)

{

services.AddTransient(item);

}#endregion}

综合以上,就可以将api到db的完整实现了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 涨潮动画加载_Android附带涨潮动画效果的曲线报表绘制

写在前面本文属于部分原创,实现安卓平台正弦曲线类报表绘制功能介绍,基于网络已有的曲线报表绘制类(LineGraphicView)自己添加了涨潮的渐变动画算法最终效果图废话少说,直接上源码一、自定义View LineGraphicView,本类注释不算多&…

Oracle Study之--Oracle等待事件(5)

Db file single write这个等待事件通常只发生在一种情况下,就是Oracle 更新数据文件头信息时(比如发生Checkpoint)。当这个等待事件很明显时,需要考虑是不是数据库中的数据文件数量太大,导致Oracle 需要花较长的时间来…

Java多线程-工具篇-BlockingQueue

Java多线程-工具篇-BlockingQueue 转载 http://www.cnblogs.com/jackyuj/archive/2010/11/24/1886553.html 这也是我们在多线程环境下,为什么需要BlockingQueue的原因。作为BlockingQueue的使用者,我们再也不需要关心什么时候需要阻塞线程,什…

怎么连接 mysql_怎样连接连接数据库

这个博客是为了说明怎么连接数据库第一步:肯定是要下载数据库,本人用的SqlServer2008,是从别人的U盘中拷来的。第二步:数据库的登录方式设置为混合登录,步骤如下:1.打开数据库这是数据库界面,要…

webstorm环境安装配置(less+autoprefixer)

node安装: 参考地址:http://www.runoob.com/nodejs/nodejs-install-setup.html 1.下载node安装包并完成安装 2.在开始菜单打开node 3.查看是否安装完成(npm是node自带安装的) 命令:node -v npm -v less安装&#xff1a…

如何解决ajax跨域问题(转)

由 于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题。本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道…

判断输入的字符串是否为回文_刷题之路(九)--判断数字是否回文

Palindrome Number问题简介:判断输入数字是否是回文,不是返回0,负数返回0举例:1:输入: 121输出: true2:输入: -121输出: false解释: 回文为121-,所以负数都不符合3:输入: 10输出: false解释: 倒序为01,不符合要求解法一:这道题比较…

VirtualBox 虚拟机复制

本文简单讲两种情况下的复制方式 1 跨电脑复制 2 同一virtrul box下 虚拟机复制 ---------------------------------------------- 1 跨电脑复制 a虚拟机 是老的虚拟机 b虚拟机 是新的虚拟机 新虚拟机b 新建, 点击下一步会生成 相应的文件夹 找到老虚拟机a的 vdi 文…

mysql case快捷方法_MySQL case when使用方法实例解析

首先我们创建数据库表: CREATE TABLE t_demo (id int(32) NOT NULL,name varchar(255) DEFAULT NULL,age int(2) DEFAULT NULL,num int(3) DEFAULT NULL,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8;插入数据:INSERT INTO t_demo VALUES (1, 张…

Java快速扫盲指南

文章转自:https://segmentfault.com/a/1190000004817465#articleHeader22 JDK,JRE和 JVM 的区别 JVM:java 虚拟机,负责将编译产生的字节码转换为特定机器代码,实现一次编译多处执行; JRE:java运…

mongo基本使用方法

mongo与关系型数据库的概念对比,区分大小写,_id为主键。 1.数据库操作 >show dbs #查看所有数据库 >use dbname #创建和切换数据库(如果dbname存在则切换到该数据库,不存在则创建并切换到该数据库;新创建的…

python爬虫消费者与生产者_Condition版生产者与消费者模式

概述:在人工智能来临的今天,数据显得格外重要。在互联网的浩瀚大海洋中,隐藏着无穷的数据和信息。因此学习网络爬虫是在今天立足的一项必备技能。本路线专门针对想要从事Python网络爬虫的同学而准备的,并且是严格按照企业的标准定…

【Python包】安装teradatasql提示找不到pycryptodome模块错误(pycrypto,pycryptodome和crypto加密库)...

1.问题描述 安装teradatasql时,出现错误Could not find a version that satisfies the requirement pycryptodome,具体如下: 2.解决方法 查看Python第三方库目录$PYTHON_HOME/lib/python3.6/site-packages目录下没有pycryptodome目录&#xf…

简述yolo1-yolo3_使用YOLO框架进行对象检测的综合指南-第二部分

简述yolo1-yolo3In the last part, we understood what YOLO is and how it works. In this section, let us understand how to apply it using pre-trained weights and obtaining the results. This article is greatly inspired by Andrew Ng’s Deep Learning Specializat…

java cxf 调用wcf接口_JAVA 调用 WCF 服务流程

1. 将 WCF 服务发布到 Windows 服务(或者 IIS)此步骤的目的是为 WCF 服务搭建服务器,从而使服务相关的 Web Services 可以被 JAVA 客户端程序调用,具体步骤参考如下:(1) 发布到 Windows 服务(2) 发布到 IIS注:如果是将 WCF 服务…

gcp devops_将GCP AI平台笔记本用作可重现的数据科学环境

gcp devopsBy: Edward Krueger and Douglas Franklin.作者: 爱德华克鲁格 ( Edward Krueger)和道格拉斯富兰克林 ( Douglas Franklin) 。 In this article, we will cover how to set up a cloud computing instance to run Python with or without Jupyter Notebo…

迅为工业级iMX6Q开发板全新升级兼容PLUS版本|四核商业级|工业级|双核商业级...

软硬件全面升级 1. 新增Yocto项目的支持 增加opencv等软件功能 2. 新近推出i.MX6增强版本核心板(PLUS) -性能更强 四种核心板全兼容 四核商业级2G/16G;双核商业级1G/8G ;四核工业级1G/8G ;四核增强版(PLUS) 3. 豪华配…

电力现货市场现货需求_现货与情绪:现货铜市场中的自然语言处理与情绪评分

电力现货市场现货需求Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works with…

java做主成分分析_主成分分析PCA

PCA(Principal Component Analysis),即主成分分析,一种常用于数据降维分析的方法。要理解PCA的原理,首先需要理解矩阵变换的意义。矩阵变换,有两种意义:1,在当前坐标系下的向量,经过矩阵M变换后…

个人学习进度(第十六周)

转载于:https://www.cnblogs.com/lhj1017/p/7011993.html