太原建设网站,qq网页版登录,搜索电影免费观看播放,麻栗坡做网站目的:
1.方库分表 2.主从分离
3.分布式事务
过程#xff1a;
官网#xff1a;指南 | FreeSql 官方文档
1.Startup.cs 添加配置#xff08;本地数据库MySql#xff09;
ConfigureServices#xff1a; FuncIServiceProvider, IFreeSql fsql r {IFreeSql …目的:
1.方库分表 2.主从分离
3.分布式事务
过程
官网指南 | FreeSql 官方文档
1.Startup.cs 添加配置本地数据库MySql
ConfigureServices FuncIServiceProvider, IFreeSql fsql r {IFreeSql fsql new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, Data Sourcelocalhost;Databasetestfreesql;User IDroot;Password123456;poolingtrue;port3306;sslmodenone;CharSetutf8;).UseMonitorCommand(cmd Console.WriteLine($Sql{cmd.CommandText}))//监听SQL语句// .UseSlave(Data Source localhost; Database testfreesql1; User ID root; Password 123456; pooling true; port 3306; sslmode none; CharSet utf8; , Data Sourcelocalhost;Databasetestfreesql2;User IDroot;Password123456;poolingtrue;port3306;sslmodenone;CharSetutf8;).UseAutoSyncStructure(true) //自动同步实体结构到数据库FreeSql不会扫描程序集只有CRUD时才会生成表。.Build();return fsql;};services.AddSingletonIFreeSql(fsql);
Configure //在项目启动时从容器中获取IFreeSql实例并执行一些操作同步表种子数据,FluentAPI等using (IServiceScope serviceScope app.ApplicationServices.CreateScope()){var fsql serviceScope.ServiceProvider.GetRequiredServiceIFreeSql();fsql.CodeFirst.SyncStructure(typeof(Blog), typeof(User), typeof(AsTableLog));//Topic 为要同步的实体类}
2.引入组件 PackageReference IncludeFreeSql Version3.2.690 /PackageReference IncludeFreeSql.Cloud Version1.6.3 /PackageReference IncludeFreeSql.DbContext Version3.2.690 /PackageReference IncludeFreeSql.Provider.MySql Version3.2.690 /PackageReference IncludeFreeSql.Provider.Sqlite Version3.2.690 / 3.创建类自动生成表 4.接口调用
using Db.Entities;
using FreeSql;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;namespace TestFreeSql.Controllers
{[Route(api/[controller]/[action])][ApiController]public class FreeSqlController : ControllerBase{//官方文档https://freesql.net/guide/getting-started.html//demo作者微信qq842725037private readonly ILoggerFreeSqlController _logger;private readonly IFreeSql _freeSql;private readonly DbContext _dbContext;private IMemoryCache _cache;public FreeSqlController(ILoggerFreeSqlController logger, IFreeSql freeSql, IMemoryCache cache){_logger logger;_freeSql freeSql;_dbContext freeSql.CreateDbContext();_cache cache;}/// summary/// 基础使用(增加、查询、删除、)/// /summary/// returns/returns[HttpGet]public async Taskstring TestFreeSqlBase(){//插入单一数据var blog new Blog() { Rating 1, Url DateTime.Now.ToString() };var save await _freeSql.InsertBlog(blog).ExecuteAffrowsAsync();//查询var select1 await _freeSql.SelectBlog().Where(x x.BlogId 1).ToListAsync();var select2 _freeSql.SelectBlog().ToList();//分页查询var select4 _freeSql.SelectBlog().Where(a a.BlogId 1);var sql select4.ToSql();var total await select4.CountAsync();var list await select4.Page(1, 20).ToListAsync();//修改var select3 await _freeSql.SelectBlog().FirstAsync();select3.Url DateTime.Now.ToString();var save2 await _freeSql.InsertOrUpdateBlog().SetSource(select3).ExecuteAffrowsAsync();//删除var delete await _freeSql.DeleteBlog().Where(x x.Url blog.Url).ExecuteAffrowsAsync();return 123;}/// summary/// 事务使用/// /summary/// returns/returns[HttpGet]public async Taskstring TestFreeSqlDbContext1(){//工作单元var ctx _dbContext;var blog new Blog() { Rating 1, Url DateTime.Now.ToString() };ctx.SetBlog().Add(blog);var user new User() { Name DateTime.Now.ToString(), Age1 };ctx.SetUser().Add(user);var saveawait ctx.SaveChangesAsync();return 123;}/// summary/// 事务使用/// /summary/// returns/returns[HttpGet]public async Taskstring TestFreeSqlDbContext2(){//工作单元var ctx _freeSql.CreateDbContext();var blog new Blog() { Rating 1, Url DateTime.Now.ToString() };ctx.SetBlog().Add(blog);var user new User() { Name DateTime.Now.ToString(), Age 1 };ctx.SetUser().Add(user);var save await ctx.SaveChangesAsync();return 123;}/// summary/// 读从库、写主库,伪功能需要自己实现数据库数据同步/// /summary/// returns/returns[HttpGet]public async Taskstring TestFreeSqlReadWrite(){//文档https://freesql.net/guide/read-write-splitting.htmlvar select2 _freeSql.SelectBlog().Where(xx.BlogId0).ToList();//读取从库//插入单一数据var blog new Blog() { Rating 1, Url DateTime.Now.ToString() };var saveSql await _freeSql.InsertBlog(blog).ExecuteAffrowsAsync();//写入主库var select3 _freeSql.SelectBlog().ToList();//读取从库var select4 _freeSql.SelectBlog().Master().ToList();//读取主库return 123;}/// summary/// 分表自动分表/// /summary/// returns/returns[HttpGet]public async Taskstring TestFreeSqlSeparate(){//文档https://github.com/dotnetcore/FreeSql/discussions/1066//插入单一数据var asTableLog new AsTableLog() { msgDateTime.Now.ToString(), createtimeDateTime.Now};var saveSql await _freeSql.InsertAsTableLog(asTableLog).ExecuteAffrowsAsync();//插入单一数据var asTableLog2 new AsTableLog() { msg DateTime.Now.ToString(), createtime DateTime.Now.AddDays(10) };var saveSql2 await _freeSql.InsertAsTableLog(asTableLog2).ExecuteAffrowsAsync();//查询var select _freeSql.SelectAsTableLog();//.Where(a a.createtime.Between(DateTime.Parse(2022-3-1), DateTime.Parse(2022-5-1)));var sql select.ToSql();var list select.ToList();return 123;}}
}5.项目地址
https://github.com/zhihuixitong/TestFreeSql 总结
1.使用上感觉一般
2.和EF相比唯一有用的分表使用分库不支持
3.分布式事务看着复杂没有使用
4.读写分离还好就是要自己实现数据同步
建议
1.分库分表完善分库支持
2.读写分离完善自动通过配置自己同步数据
3.分布式事务使用简单化
4.其他基本功能少花点精力优化重点优化其他组件没有的功能