.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 --生成数据库迁移相应的脚本

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

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

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

好了,以上就完成了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的完整实现了。

.netcore mysql_.netcore基于mysql的codefirst相关推荐

  1. 从NetCore报错到MySql安全

    从NetCore报错到MySql安全 原文:从NetCore报错到MySql安全 之前项目在测试服务器上的一些接口时不时会报出下面的错误:(采用Abp框架) "SocketException ...

  2. .NetCore中EFCore for MySql整理(二)

    一.简介 EF Core for MySql的官方版本MySql.Data.EntityFrameworkCore 目前正是版已经可用当前版本v6.10,对于以前的预览版参考:http://www.c ...

  3. 电商系统设计MySQL_基于MySQL设计的图书电商系统的制作方法

    本发明涉及一种图书销售系统,尤其涉及基于MySQL设计的图书电商系统. 背景技术: 相较于传统的图书经营模式,网络图书销售的成本更低,且图书信息更新快,而消费者也能够随时随地购买图书,完全不受时间和空 ...

  4. geohash mysql_基于MySQL实现按距离排序、范围查找geoHash

    简介现在几乎所有的O2O应用中都会存在"按范围搜素.离我最近.显示距离"等等类似的功能,那这样的功能是怎么实现的呢?本文提供了基于MySQL的实现方式,同样适用于其它数据库.本文不 ...

  5. dbhelper mysql_.net的基于mysql的DBhelper实现_MySQL

    网上很少dbhelper的基于mysql数据库的,所以实现了下mysql的dbhelper,封装好了各种方法调用数据库函数,可以应用于小型的c#程序中.使用时记得修改password和端口号,mysq ...

  6. erwin教程 mysql_如何使用Erwin进行基于MySQL的数据库设计_MySQL

    ERwin是常用的进行数据库设计的工具,支持众多的数据库,可惜不支持MYSQL,大概是因为很少有企业用到MYSQL吧,但是MYSQL实际上还是很优秀的. 为了能够使用ERWIN能够进行基于MYSQL数 ...

  7. erwin教程 mysql_如何使用Erwin进行基于MySQL的数据库设计

    如何使用Erwin进行基于MySQL的数据库设计 文章作者:网友投稿 发布时间:2008-09-01 13:44:45 来源:网络 ERwin是常用的进行数据库设计的工具,支持众多的数据库,可惜不支持 ...

  8. SpringSecurity实战:基于mysql自定义SpringSecurity权限认证规则

    上文<Spring Security 源码分析:Spring Security 授权过程>已经详细分析了Spring Security 授权过程,接下来通过上文的授权过程我们可以自定义授权 ...

  9. linux ftp 团队认证,linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建

    linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建 1.FTP协议:有命令和数据连接两种 命令连接,控制连接:21/tcp 数据连接: 主动模式,运行在20/tcp端口 和 ...

最新文章

  1. python 获取excel文件内sheet名称列表
  2. 陶哲轩实分析 定理 13.4.5
  3. 27. 代码实例-spring声明式事务
  4. 论文浅尝 - ICML2020 | 基于子图推理的归纳式关系预测
  5. python 系统架构_Python之优化系统架构的方案
  6. java dateformat hh_SimpleDateFormat上的Java HH:mm和hh:mm之间的区别
  7. 13 款高逼格且实用的 Linux 运维必备工具
  8. DM8168 --交叉编译ARM版 Qt (qt-everywhere-opensource-src-4.8.4)
  9. Asp.net发布的CheckList
  10. 步进电机、伺服电机、舵机的区别与控制(角度、转速)
  11. CloudComparePCL 点云OOB包围盒
  12. uni-app学习笔记(1):模板语法
  13. EVE-NG 使用xshell
  14. 基于51单片机的波形发生器设计(proteus仿真波幅周期可调)
  15. JVM监控常用的6个命令行工具
  16. 导入mysql 1044_MySQL导入sql文件错误#1044
  17. Social Justice Awards秋季赛正式启动
  18. CPP学习之string类的讲解
  19. unity3d调用android方法,Unity3D 调用Android原生方法2
  20. HS9148红外遥控解码

热门文章

  1. PyCharm调试错误
  2. 深度学习笔记之win7下TensorFlow的安装
  3. npy一维数组如何对给出的索引进行反选
  4. 智能商业大会构造信息化交流平台
  5. JAVA中动态编译的简单使用
  6. Javascript构造函数的继承
  7. PureMvc学习笔记
  8. MySQL命令行导出数据库
  9. samba加入windows 2003域
  10. 虚拟机性能测试:八 性能分析—Windows体验指数