sharding/samples/Sample.MySql/Controllers/WeatherForecastController.cs

192 lines
9.6 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Sample.MySql.DbContexts;
using Sample.MySql.Domain.Entities;
using Sample.MySql.multi;
using Sample.MySql.Shardings;
using ShardingCore.Core.RuntimeContexts;
using ShardingCore.Core.VirtualRoutes.TableRoutes;
using ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions;
using ShardingCore.Extensions.ShardingQueryableExtensions;
using ShardingCore.Helpers;
namespace Sample.MySql.Controllers
{
public class ssss
{
public string Id { get; set; }
public int C { get; set; }
}
public class abc
{
public string id { get; set; }
public string name { get; set; }
public int count { get; set; }
}
public class ABC
{
private readonly DefaultShardingDbContext _defaultTableDbContext;
public ABC(DefaultShardingDbContext defaultTableDbContext)
{
_defaultTableDbContext = defaultTableDbContext;
}
public IQueryable<SysTest> GetAll()
{
return _defaultTableDbContext.Set<SysTest>();
}
public virtual IQueryable<SysTest> Select => this.GetAll();
}
[ApiController]
[Route("[controller]/[action]")]
public class WeatherForecastController : ControllerBase
{
private readonly DefaultShardingDbContext _defaultTableDbContext;
private readonly IShardingRuntimeContext _shardingRuntimeContext;
private readonly ABC _abc;
public WeatherForecastController(DefaultShardingDbContext defaultTableDbContext,IShardingRuntimeContext shardingRuntimeContext)
{
_defaultTableDbContext = defaultTableDbContext;
_shardingRuntimeContext = shardingRuntimeContext;
_abc=new ABC(_defaultTableDbContext);
}
public IQueryable<SysTest> GetAll()
{
var shardingRouteManager = _shardingRuntimeContext.GetShardingRouteManager();
// var shardingTableCreator = _shardingRuntimeContext.GetShardingTableCreator();
// var tableRouteManager = _shardingRuntimeContext.GetTableRouteManager();
// //系统的时间分片都会实现 ITailAppendable 如果不是系统的自定义的转成你自己的对象即可
// var virtualTableRoute = (ITailAppendable)tableRouteManager.GetRoute(typeof(SysUserMod));
// //一定要先在路由里面添加尾巴
// virtualTableRoute.Append("20220921");
// shardingTableCreator.CreateTable<SysUserMod>("ds0","20220921");
return _defaultTableDbContext.Set<SysTest>();
}
[HttpGet]
public async Task<IActionResult> Get()
{
//OtherDbContext.CurrentId = "";
// var myUsers0 = _otherDbContext.MyUsers.ToList();
// OtherDbContext.CurrentId = "123";
// var myUsers1 = _otherDbContext.MyUsers.ToList();
// OtherDbContext.CurrentId = "456";
// var myUsers2= _otherDbContext.MyUsers.ToList();
// var sysUserModQueryable = _otherDbContext.MyUsers.Where(o => o.Id == "2");
// var dbSetDiscoverExpressionVisitor = new DbSetDiscoverExpressionVisitor<MyUser>(_otherDbContext);
// dbSetDiscoverExpressionVisitor.Visit(sysUserModQueryable.Expression);
// var myUsers = dbSetDiscoverExpressionVisitor.DbSet;
// Console.WriteLine("------------");
// using (var tran = _defaultTableDbContext.Database.BeginTransaction())
// {
// SysUserMod? resultX123 = await _defaultTableDbContext.Set<SysUserMod>()
// .Where(o => o.Id == "2").FirstOrDefaultAsync();
// _defaultTableDbContext.Update(resultX123);
// _defaultTableDbContext.SaveChanges();
var resultX1 = await _defaultTableDbContext.Set<SysUserMod>()
.Where(o => o.Id == "2" || o.Id == "3").GroupBy(o => new { o.Id,o.Name })
.Select(o => new
{
id = o.Key.Id,
name = o.Key.Name,
count = o.Count()
}).ToListAsync();
var resultX12 = await _defaultTableDbContext.Set<SysUserMod>()
.Where(o => o.Id == "2" || o.Id == "3").GroupBy(o => new { o.Id,o.Name })
.Select(o => new abc
{
id = o.Key.Id,
name = o.Key.Name,
count = o.Count()
}).ToListAsync();
var x=await (from ut in _defaultTableDbContext.Set<SysTest>()
from uu in _defaultTableDbContext.Set<SysUserMod>()
where ut.Id == uu.Id
select ut).FirstOrDefaultAsync();
var x1=await (from ut in _defaultTableDbContext.Set<SysUserMod>()
from uu in _defaultTableDbContext.Set<SysTest>()
where ut.Id == uu.Id
select ut).FirstOrDefaultAsync();
// var firstOrDefault = _defaultTableDbContext.Set<SysUserMod>().FromSqlRaw($"select * from {nameof(SysUserMod)}").FirstOrDefault();
var sysUserMods1 = _defaultTableDbContext.Set<SysTest>().UseConnectionMode(1)
.Select(o => new ssss(){ Id = o.Id, C = _abc.Select.Count(x => x.Id == o.Id) }).ToList();
var sysUserMods2 = _defaultTableDbContext.Set<SysTest>()
.Select(o => new ssss(){ Id = o.Id, C = GetAll().Count(x => x.Id == o.Id) }).ToList();
var sysTests = GetAll();
var sysUserMods3 = _defaultTableDbContext.Set<SysTest>()
.Select(o => new ssss(){ Id = o.Id, C = sysTests.Count(x => x.Id == o.Id) }).ToList();
var resultX = await _defaultTableDbContext.Set<SysUserMod>()
.Where(o => o.Id == "2" || o.Id == "3").FirstOrDefaultAsync();
var resultY = await _defaultTableDbContext.Set<SysUserMod>().FirstOrDefaultAsync(o => o.Id == "2" || o.Id == "3");
var shardingFirstOrDefaultAsyncxxx = await _defaultTableDbContext.Set<SysUserLogByMonth>().Where(o=>o.Time==DateTime.Now).ToListAsync();
var result = await _defaultTableDbContext.Set<SysTest>().AnyAsync();
var result22 = await _defaultTableDbContext.Set<SysUserMod>().Where(o => o.Id == "2"&&o.Name=="ds1").ToListAsync();
var result1 = await _defaultTableDbContext.Set<SysUserMod>().Where(o => o.Id == "2" || o.Id == "3").ToListAsync();
var result2 = await _defaultTableDbContext.Set<SysUserLogByMonth>().Skip(1).Take(10).ToListAsync();
var shardingFirstOrDefaultAsync = await _defaultTableDbContext.Set<SysUserLogByMonth>().ToListAsync();
var shardingCountAsync = await _defaultTableDbContext.Set<SysUserMod>().CountAsync();
var shardingCountAsyn2c = _defaultTableDbContext.Set<SysUserLogByMonth>().Count();
// var dbConnection = _defaultTableDbContext.Database.GetDbConnection();
// if (dbConnection.State != ConnectionState.Open)
// {
// dbConnection.Open();
// }
// using (var dbCommand = dbConnection.CreateCommand())
// {
// dbCommand.CommandText = "select * from systest";
// dbCommand.Transaction = _defaultTableDbContext.Database.CurrentTransaction?.GetDbTransaction();
// var dbDataReader = dbCommand.ExecuteReader();
// while (dbDataReader.Read())
// {
// Console.WriteLine(dbDataReader[0]);
// }
// }
// }
return Ok(1);
}
[HttpGet]
public async Task<IActionResult> Get1()
{
var resultX = await _defaultTableDbContext.Set<SysUserMod>()
.Where(o => o.Id == "2" || o.Id == "3").FirstOrDefaultAsync();
Console.WriteLine("-----------------------------------------------------------------------------------------------------");
var resultY = await _defaultTableDbContext.Set<SysUserMod>().FirstOrDefaultAsync(o => o.Id == "2" || o.Id == "3");
Console.WriteLine("-----------------------------------------------------------------------------------------------------");
var result = await _defaultTableDbContext.Set<SysTest>().AnyAsync();
Console.WriteLine("-----------------------------------------------------------------------------------------------------");
return Ok();
}
[HttpGet]
public async Task<IActionResult> Get2()
{
// var sql= from a in _defaultTableDbContext.Set<DynamicTable>()
// join b in _defaultTableDbContext.Set<SysTest>()
// on a.Id equals b.Id into t1
// from aa1 in t1.DefaultIfEmpty()
// // join bc in _defaultTableDbContext.Set<SysTest>()
// // on a.Id equals bc.Id into t2
// // from aa2 in t2.DefaultIfEmpty()
// select new
// {
// ID = a.Id
// };
// var listAsync =await sql.ToListAsync();
var sysUserMods1 = await _defaultTableDbContext.Set<SysUserMod>().FromSqlRaw("select * from SysUserMod where id='2'").ToListAsync();
var sysUserMods2 = await _defaultTableDbContext.Set<SysTest>().FromSqlRaw("select * from SysTest where id='2'").ToListAsync();
return Ok();
}
}
}