.netcore基于mysql的codefirst

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

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

须引入Pomelo.EntityFrameworkCore.MySqlMicrosoft.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.EntityFrameworkCoreMicrosoft.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的完整实现了。

最新文章

  1. chrome扩展程序开发
  2. IM服务器的架构
  3. Ubuntu 安装 ImageMagic(6.9.1-6)及 PHP 的 imagick (3.0.1)扩展
  4. Tomcat遇到”Error listenerStart”或”Error filterStart”问题且无详细日志时的log配置.
  5. Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器
  6. 【邮件】imap与pop3的区别
  7. ThrottleStop
  8. 【floyd求最小环】【Vijos 1046】【观光旅游】
  9. JMeter常见错误解决方法
  10. leetcode 54. Spiral Matrix 、59. Spiral Matrix II
  11. d4-01
  12. java项目对jar包加密流程,防止反编译
  13. BigData_Jia
  14. Miller-Rabin判质数和Pollared-Rho因数分解
  15. 安装NVIDIA驱动时禁用自带nouveau驱动
  16. jQuery属性操作(四)
  17. Solr --- Group查询与Facet区别
  18. Linux:提示符PS1个性设置
  19. 本地代码同步到github
  20. Circuit translates I2C voltages

热门文章

  1. Python实现的数据结构与算法之链表详解
  2. (入门)matlab中创建和调用m文件
  3. 看动画学算法之:linkedList
  4. Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)
  5. 磁盘 IOPS(每秒读写次数) 的计算方法
  6. 一些IT service的相关知识
  7. HanLP的分词统计
  8. 热力图 vue 项目中使用热力图插件 “heatmap.js”(保姆式教程)
  9. Windows 上的苹果 mac Time Machine 时间机器免费替代品 FreeFileSync 操作指南
  10. DockerFile系统的学习