在.net frameworks的ef里连接mysql我们已经测试通过了,而在dotnet core里的efCore上去连接mysql我们需要测试一下,并且在测试过程中出现了一些问题,当然最后也是解决了,下面总结一下,分享给大家!
mysql项目的依赖包
数据上下文和连接串
数据仓储
添加模块扩展
业务层注入
业务实现
mysql项目的依赖包
Microsoft.EntityFrameworkCore
MySql.Data.EntityFrameworkCore
数据上下文和连接串
对于mysql的上下文和使用sql没什么两样,需要注意的是要添加的SSL的否定,否则同时会有异常出来
MySql.Data.MySqlClient.MySqlException: The host localhost does not support SSL connections.
public partial classMySqlERPContext : DbContext, IERPContext
{protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL(@"Server=localhost;database=ef;uid=root;pwd=root;SslMode=None");base.OnConfiguring(optionsBuilder);
}public DbSet system_users { get; set; }public DbSet Users { set; get; }
}
数据仓储
实现继承基础设施里的EFRepository就可以了,我们需要为仓储传递一个数据上下文进来,就是上面定义的Mysql的上下文对象,这样你的仓储就可以操作这个上下文了.
public class ERPRepository : EFRepository where T : class{public ERPRepository() : base(newMySqlERPContext()) { }
}
添加模块扩展
我们基础设施里有一些已经实现的功能,我们会做成扩展方法,方便以业务系统的使用,而和业务相关的对象,如业务仓储,业务上下文可以在业务系统添加扩展,方法后期的注入工作,一般的业务扩展代码如下
///
///对于当前项目的模块化扩展///
public static classModuleExtensions
{///
///注册一个数据仓库///
///
///
public static ModuleManager UseErpRepository(thisModuleManager configuration)
{
configuration.RegisterGenericModule(typeof(IRepository<>),typeof(ERPRepository<>));returnconfiguration;
}///
///注册一个数据上下文///
///
///
public static ModuleManager UseErpContext(thisModuleManager configuration)
{configuration.RegisterModule();returnconfiguration;
}
}
业务层注入
模块的扩展实现之后,就是在业务系统初始化时注入它们,实现哪种方法就去注册哪里,一般在global或者startup里去实现注入功能.
//注册模块
ModuleManager.Create()
.UseAutofac()
.UseESBIoC()
.UseErpContext()
.UseErpRepository();
业务实现
可以直接从模块里把对应的仓储取出来,然后执行对应的curd操作即可
ModuleManager.Resolve>().Insert(newApi.User
{
Name= "two"});
这样我们在dotnet core里通过efcore去操作mysql数据库就完成了,需要注意的是,在mysql连接串中,一定要添加SslMode=None这个属性,否则会启用ssl链接!
感谢各位阅读!