数据库操作代码:
var list = new List<ShardingData>(1000); var rdn = new Random(); for(var i = 0; i < 1000; i++) { var model = new ShardingData { Id = Yitter.IdGenerator.YitIdHelper.NextId(), Text = "" + "ABCDE"[rdn.Next(0, 4)], Value = rdn.Next(1000, 9999), Date = new DateTime(2021, rdn.Next(1, 12), rdn.Next(1, 28)) }; list.Add(model); } var count = await shardingDb.InsertAsync(list); var query = shardingDb.GetIShardingQueryable<ShardingData>(); var max = await query.MaxAsync(e => e.Value); var total = await query.Where(e => e.Date >= new DateTime(2021,4,1) && e.Date >= new DateTime(2021, 6, 30)).SumAsync(e => e.Value); var detail = await query.Where(e => e.Text == "A").OrderBy(e => e.Date).ToListAsync();
报错信息:
System.InvalidOperationException: Sequence contains no elements
at System.Linq.ThrowHelper.ThrowNoElementsException()
at System.Linq.Enumerable.Single[TSource](IEnumerable1 source) at EFCore.Sharding.ShardingContainer.GetTheWriteTable[T](T obj) at EFCore.Sharding.ShardingDbAccessor.<>c__DisplayClass8_01.b__0(T x)
at System.Linq.Enumerable.SelectListIterator2.ToList() at EFCore.Sharding.ShardingDbAccessor.WriteTableAsync[T](List1 entities, Func3 accessDataAsync) at EFCore.Sharding.ShardingDbAccessor.InsertAsync[T](List1 entities, Boolean tracking)
at WebApi.Api.DingtalkController.ShardingTest() in C:\Workshop\DingSync\WebApi\Api\DingtalkController.cs:line 75
平台版本:5.0.0 Efcore版本:5.0.9 Mysql库版本:Pomelo.EntityFrameworkCore.MySql 5.0.1 Efcore.sharding 版本:5.0.15
Start.cs 配置代码: ` bool enabledSharding = config.GetValue("Sharding:Eanbled", true);
if (enabledSharding)
{
services.AddEFCoreSharding(config =>
{
config.SetEntityAssemblies(Assembly.GetExecutingAssembly());
config.CreateShardingTableOnStarting(true);
数据库操作代码:
var list = new List<ShardingData>(1000); var rdn = new Random(); for(var i = 0; i < 1000; i++) { var model = new ShardingData { Id = Yitter.IdGenerator.YitIdHelper.NextId(), Text = "" + "ABCDE"[rdn.Next(0, 4)], Value = rdn.Next(1000, 9999), Date = new DateTime(2021, rdn.Next(1, 12), rdn.Next(1, 28)) }; list.Add(model); } var count = await shardingDb.InsertAsync(list); var query = shardingDb.GetIShardingQueryable<ShardingData>(); var max = await query.MaxAsync(e => e.Value); var total = await query.Where(e => e.Date >= new DateTime(2021,4,1) && e.Date >= new DateTime(2021, 6, 30)).SumAsync(e => e.Value); var detail = await query.Where(e => e.Text == "A").OrderBy(e => e.Date).ToListAsync();
报错信息: System.InvalidOperationException: Sequence contains no elements at System.Linq.ThrowHelper.ThrowNoElementsException() at System.Linq.Enumerable.Single[TSource](IEnumerableb__0(T x)
at System.Linq.Enumerable.SelectListIterator
1 source) at EFCore.Sharding.ShardingContainer.GetTheWriteTable[T](T obj) at EFCore.Sharding.ShardingDbAccessor.<>c__DisplayClass8_0
1.2.ToList() at EFCore.Sharding.ShardingDbAccessor.WriteTableAsync[T](List
1 entities, Func3 accessDataAsync) at EFCore.Sharding.ShardingDbAccessor.InsertAsync[T](List
1 entities, Boolean tracking) at WebApi.Api.DingtalkController.ShardingTest() in C:\Workshop\DingSync\WebApi\Api\DingtalkController.cs:line 75