.netcore基于mysql的codefirst
.netcore基于mysql的codefirst
此文仅是对于netcore基于mysql的简单的codefirst实现的简单记录。示例为客服系统消息模板的增删改查实现
第一步、创建实体项目,并在其中建立对应的实体类,以及数据库访问类
须引入Pomelo.EntityFrameworkCore.MySql和Microsoft.EntityFrameworkCore
/// <summary>
/// 消息模板
/// </summary>
public class MessatgeTemplate
{
/// <summary>
/// id
/// </summary>
[Key]
public System.Guid Id { get; set; }
/// <summary>
/// 名称
/// </summary>
[MaxLength(250)]
public string Name { get; set; }
/// <summary>
/// 关键字
/// </summary>
[MaxLength(500)] public string Keywords { get; set; }
/// <summary>
/// 内容
/// </summary> public string Content { get; set; }
/// <summary>
/// 语言
/// </summary>
[MaxLength(80)]
public string CultureCode { get; set; }
/// <summary>
/// 类别
/// </summary>
[MaxLength(250)] public string Category { get; set; }
/// <summary>
/// 备注信息
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool Enabled { get; set; }
/// <summary>
/// 创建时间
/// </summary> public DateTime Created { get; set; }
/// <summary>
/// 最近修改时间
/// </summary>
public DateTime LastModified { get; set; }
}
/// <summary>
///
/// </summary>
public class CustomerServiceContext : DbContext
{
public CustomerServiceContext(DbContextOptions<CustomerServiceContext> options)
: base(options)
{
}
/// <summary>
/// 配置
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
} public virtual DbSet<MessatgeTemplate> MessatgeTemplate { get; set; } }
第二步、创建业务服务项目,添加对应的业务处理类
/// <summary>
/// 客服业务统一接口
/// </summary>
public interface ICustomerServicerSerice
{ }
/// <summary>
/// 模板业务类
/// </summary>
public class MessageTemplateService : ICustomerServicerSerice
{
private CustomerServiceContext _CustomerServiceContext;
public MessageTemplateService(CustomerServiceContext customerServiceContext)
{
this._CustomerServiceContext = customerServiceContext;
}
/// <summary>
/// 创建模板
/// </summary>
public void CreateMessageTemplate()
{
//todo create
}
/// <summary>
/// 修改模板
/// </summary>
public void ModifyMessageTemplate()
{
//TODO modified
}
/// <summary>
/// 获取模板
/// </summary>
/// <returns></returns>
public List<object> GetMessageTemplate()
{
//TODO根据传入参数查询模板
return null;
}
/// <summary>
/// 删除
/// </summary>
public void DeleteMessageTemplate(Guid id)
{
var template = _CustomerServiceContext.MessatgeTemplate.FirstOrDefault(p => p.Id == id);
if (template != null)
{
_CustomerServiceContext.MessatgeTemplate.Remove(template);
_CustomerServiceContext.SaveChanges();
} }
/// <summary>
/// 批量设置是否可用
/// </summary>
/// <param name="ids"></param>
/// <param name="enabled"></param>
public void BatchEnableTemplate(List<Guid> ids, bool enabled)
{
//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<CustomerServiceContext>(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 --生成数据库迁移相应的脚本
------------------------
命令执行成功后,就可以在数据库中找到创建好的数据库和表了

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

好了,以上就完成了codefirst的简单操作了。不过跟着第二步的业务类其实没啥关系!!!如果只是进行数据迁移确实没有service层什么事,但是业务逻辑要走通,实现crud,业务层还是必须的。
---------------------------------------------------------------------------------------------------------------------
以下就顺带写下controller中引入service,实现简单的删除业务逻辑(其它的业务逻辑---略)
在webapi创建MessageTemplateController
[Route("api/[controller]")]
[ApiController]
public class MessageTemplateController : ControllerBase
{
private MessageTemplateService _MessageTemplateService;
public MessageTemplateController(MessageTemplateService messageTemplateService)
{
this._MessageTemplateService = messageTemplateService;
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
[HttpPost("DeleteMessageTemplate")]
public void DeleteMessageTemplate(Guid id)
{
_MessageTemplateService.DeleteMessageTemplate(id);
}
//TODO其他操作:查询,新增,修改等
}
修改Startup.cs类,注入服务
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<CustomerServiceContext>(p => p.UseMySql(Configuration.GetConnectionString("CumstomerServiceConnection")));
#region 注入业务服务
Assembly assembly = Assembly.Load("Qingy.DotNetCoreStudy.CustomerServiceService");
List<Type> types = assembly.GetTypes().Where(u => u.IsClass && !u.IsAbstract && !u.IsGenericType
&& u.GetInterfaces().Any(p => p == typeof(ICustomerServicerSerice))
).ToList();
foreach (var item in types)
{
services.AddTransient(item);
}
#endregion
}
综合以上,就可以将api到db的完整实现了。
.netcore基于mysql的codefirst的更多相关文章
- 一个基于mysql构建的队列表
通常大家都会使用redis作为应用的任务队列表,redis的List结构,在一段进行任务的插入,在另一端进行任务的提取. 任务的插入 $redis->lPush("key:task:l ...
- 在Jena框架下基于MySQL数据库实现本体的存取操作
在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...
- 基于MySQL协议的数据库中间层项目Atlas - 360团队
一.简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了 ...
- EF初始化mysql数据库codefirst
EF使用Code First修改生成数据库表名的方法 1. 重写OnModelCreating,去掉表名复数 System.Data.Entity.ModelConfiguration.Convent ...
- Mysql Explain 解读(基于MySQL 5.6.36)
Mysql Explain 解读(基于MySQL 5.6.36) 1.语法 explain < table_name > #例子 explain select * from t3 wher ...
- 搭建基于MySQL的读写分离工具Amoeba
搭建基于MySQL的读写分离工具Amoeba: Amoeba工具是实现MySQL数据库读写分离的一个工具,前提是基于MySQL主从复制来实现的: 实验环境(虚拟机): 主机 角色 10.10.10.2 ...
- 实操重写IK分词器源码,基于mysql热更新词库
实操重写IK分词器源码,基于mysql热更新词库参考网址:https://blog.csdn.net/wuzhiwei549/article/details/80451302 问题一:按照这篇文章的介 ...
- 基于MySQL提供的Yum repository安装MySQL5.6
基于MySQL提供的Yum repository安装MySQL5.6 1:下载YUM包 1.1切换到root用户: 1)su - root 2)wget http://dev.mysql.com/ge ...
- 新浪微博基于MySQL的分布式数据库实践
提起微博,相信大家都是很了解的.但是有谁知道微博的数据库架构是怎样的呢?在今天举行的2011数据库技术大会上,新浪首席DBA杨海潮为我们详细解读了新浪微博的数据库架构——基于MySQL的分布式数据库实 ...
随机推荐
- 井字棋小游戏(C语言)
最近沉迷于<NetHack>.<DCSS>等字符游戏,对其很感兴趣,于是用C语言写了个字符界面的井字棋小游戏.欢迎大家指教. 编写时遇到了一些问题,我原先准备用循环,直到读取到 ...
- makefile从入门到入门
makefile文件是用来帮助编译和管理C++项目代码的,需要配合make命令使用.makefile里也可以执行shell操作,具备一部分.sh脚本的功能. makefile格式 makefile内容 ...
- Java知识系统回顾整理01基础06数组05复制数组
数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少 一.复制数组 把一个数组的值,复制到另一个数组中 System.arraycopy(src, srcPos, dest, de ...
- P4279 [SHOI2008]小约翰的游戏(Anti_nim)
Link 题面 题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有 \(n\) 堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子, 在这堆石子中取走任意多的石子,但不 ...
- Python日志采集(详细)
通常在前期调试代码的时候,我们会使用print在IDE控制台打印一些信息,判断运行情况.但在运行整个自动化测试项目的过程中,通过print打印信息的方式获取运行情况显然行不通. 这时就需要收集日志,每 ...
- 多测师讲解 _接口自动化框架设计_高级讲师肖sir
背景:因为把传入接口参数.组建测试用例.执行测试用例和发送报告,都放入一个.py文件对于接口的使用非常不灵活就需要数据和接口业务进行分离让代码之间的 耦合性降低.和实现接口的分层管理,所以需要对代码进 ...
- OpenCV开发笔记(七十):红胖子带你傻瓜式编译VS2017x64版本的openCV4
前言 红胖子来也!!! opencv_contrib是opencv提供额外的工具,提供一些基础算法,之前编译了不带opencv_contrib的版本,不带opencv_contrib的cuda硬 ...
- 【编程学习笔记】如何组织构建多文件 C 语言程序!编程也有~
优秀 Unix 程序哲学 首先,你要知道这个 C 程序是一个 Unix 命令行工具.这意味着它运行在(或者可被移植到)那些提供 Unix C 运行环境的操作系统中.当贝尔实验室发明 Unix 后,它从 ...
- 编程代码 | C++/C输出阳历万年历—精美日历制作
前言:本文章向大家介绍如何用C语言代码实现万年历使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. void输出万年历(int年, int月, int日 ...
- linux(centos8):安装Jenkins持续集成工具(java 14 / jenkins 2.257)
一,什么是Jenkins? 1,jenkins是什么? Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具, 用于监控持续重复的工作,旨在提供一个开放易用的软件平台, 使软件的持续 ...