Ai
65 Star 543 Fork 117

GVP薛家明/sharding-core

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
ShardingQueryCompiler.cs 5.26 KB
一键复制 编辑 原始数据 按行查看 历史
薛家明 提交于 2022-11-22 16:45 +08:00 . 升级到efcore各自版本
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.EntityFrameworkCore.Query.Internal;
using ShardingCore.Exceptions;
using ShardingCore.Sharding.Abstractions;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage;
using ShardingCore.Core;
using ShardingCore.Core.RuntimeContexts;
namespace ShardingCore.EFCores
{
/// <summary>
/// 当前查询编译拦截
/// </summary>
public class ShardingQueryCompiler : QueryCompiler,IShardingDbContextAvailable
{
private readonly IShardingDbContext _shardingDbContext;
private readonly IShardingCompilerExecutor _shardingCompilerExecutor;
//
#if !EFCORE2
public ShardingQueryCompiler(IShardingRuntimeContext shardingRuntimeContext,IQueryContextFactory queryContextFactory, ICompiledQueryCache compiledQueryCache, ICompiledQueryCacheKeyGenerator compiledQueryCacheKeyGenerator, IDatabase database, IDiagnosticsLogger<DbLoggerCategory.Query> logger, ICurrentDbContext currentContext, IEvaluatableExpressionFilter evaluatableExpressionFilter, IModel model)
: base(queryContextFactory, compiledQueryCache, compiledQueryCacheKeyGenerator, database, logger, currentContext, evaluatableExpressionFilter, model)
{
_shardingDbContext = currentContext.Context as IShardingDbContext ??
throw new ShardingCoreException("db context operator is not IShardingDbContext");
_shardingCompilerExecutor = shardingRuntimeContext.GetShardingCompilerExecutor();
}
#endif
#if EFCORE2
public ShardingQueryCompiler(IShardingRuntimeContext shardingRuntimeContext,IQueryContextFactory queryContextFactory, ICompiledQueryCache compiledQueryCache, ICompiledQueryCacheKeyGenerator compiledQueryCacheKeyGenerator, IDatabase database, IDiagnosticsLogger<DbLoggerCategory.Query> logger, ICurrentDbContext currentContext, IQueryModelGenerator queryModelGenerator)
: base(queryContextFactory, compiledQueryCache, compiledQueryCacheKeyGenerator, database, logger, currentContext, queryModelGenerator)
{
_shardingDbContext = currentContext.Context as IShardingDbContext ??
throw new ShardingCoreException("db context operator is not IShardingDbContext");
_shardingCompilerExecutor = shardingRuntimeContext.GetShardingCompilerExecutor();
}
#endif
// public ShardingQueryCompiler(IShardingRuntimeContext shardingRuntimeContext,ICurrentDbContext currentContext)
// {
// _shardingDbContext = currentContext.Context as IShardingDbContext ??
// throw new ShardingCoreException("db context operator is not IShardingDbContext");
// _shardingCompilerExecutor = shardingRuntimeContext.GetShardingCompilerExecutor();
//
// }
public override TResult Execute<TResult>(Expression query)
{
return _shardingCompilerExecutor.Execute<TResult>(_shardingDbContext, query);
}
#if !EFCORE2
public override TResult ExecuteAsync<TResult>(Expression query, CancellationToken cancellationToken)
{
return _shardingCompilerExecutor.ExecuteAsync<TResult>(_shardingDbContext, query, cancellationToken);
}
[ExcludeFromCodeCoverage]
public override Func<QueryContext, TResult> CreateCompiledQuery<TResult>(Expression query)
{
throw new NotImplementedException();
}
[ExcludeFromCodeCoverage]
public override Func<QueryContext, TResult> CreateCompiledAsyncQuery<TResult>(Expression query)
{
throw new NotImplementedException();
}
#endif
#if EFCORE2
public override IAsyncEnumerable<TResult> ExecuteAsync<TResult>(Expression query)
{
return _shardingCompilerExecutor.ExecuteAsync<TResult>(_shardingDbContext, query);
}
public override Task<TResult> ExecuteAsync<TResult>(Expression query, CancellationToken cancellationToken)
{
return _shardingCompilerExecutor.ExecuteAsync<TResult>(_shardingDbContext, query, cancellationToken);
}
[ExcludeFromCodeCoverage]
public override Func<QueryContext, TResult> CreateCompiledQuery<TResult>(Expression query)
{
throw new NotImplementedException();
}
[ExcludeFromCodeCoverage]
public override Func<QueryContext, IAsyncEnumerable<TResult>> CreateCompiledAsyncEnumerableQuery<TResult>(Expression query)
{
throw new NotImplementedException();
}
[ExcludeFromCodeCoverage]
public override Func<QueryContext, Task<TResult>> CreateCompiledAsyncTaskQuery<TResult>(Expression query)
{
throw new NotImplementedException();
}
#endif
public IShardingDbContext GetShardingDbContext()
{
return _shardingDbContext;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/xuejm/sharding-core.git
git@gitee.com:xuejm/sharding-core.git
xuejm
sharding-core
sharding-core
main

搜索帮助