GithubHelp home page GithubHelp logo

efcore.sharding's People

Contributors

coldairarrow avatar xieweikang123 avatar xuejmnet avatar xxoogod avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

efcore.sharding's Issues

Bug反馈,在连接MyCat+MySql架构的时候,第一次查询语句正常,第二次就出现MySql.Data.MySqlClient.MySqlException:“Unknown command”错误

下面是错误信息:
MySql.Data.MySqlClient.MySqlException
HResult=0x80004005
Message=Unknown command
Source=System.Private.CoreLib
StackTrace:
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at System.Threading.Tasks.ValueTask1.get_Result() at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult()
at MySqlConnector.Core.ServerSession.d__69.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 495
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at MySqlConnector.Core.ConnectionPool.<GetSessionAsync>d__10.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionPool.cs:line 72 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at MySqlConnector.Core.ConnectionPool.<GetSessionAsync>d__10.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionPool.cs:line 141 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Threading.Tasks.ValueTask1.get_Result()
at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult() at MySql.Data.MySqlClient.MySqlConnection.<CreateSessionAsync>d__110.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 645 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Threading.Tasks.ValueTask1.get_Result()
at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult() at MySql.Data.MySqlClient.MySqlConnection.<OpenAsync>d__26.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 312 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at MySql.Data.MySqlClient.MySqlConnection.Open() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 280 at EFCore.Sharding.DbRepository.GetDataTableWithSql(String sql, ValueTuple2[] parameters)
at EFCore.Sharding.DbRepository.GetListBySql[T](String sqlStr, ValueTuple`2[] parameters)
at EFCore.Program.Main(String[] args) in C:\EFCore\EFCore\Program.cs:line 22

读写分离

如果只设置读写分离(不需要分表),如何设置呢?且从库是多个

_Sql结尾接口对Schema支持

image
实体类定义,指定Schema
在执行Insert的时候,结果正常,
执行Update,和Delete的时候,总是报 不正确的对象名
最后跟踪Sql才发现 Shema [Report]丢了
image
只能改成这样了
image
image
image

逻辑删除时失败

物理删除时,操作成功。当启用逻辑删除时,添加修改功能正常,删除时报如下错误。

2020-05-12 14:48:50.374 +08:00 [ERR]
MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'basevue.sysadmin' doesn't exist
---> MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'basevue.sysadmin' doesn't exist
at MySqlConnector.Core.ServerSession.ReceiveReplyAsyncAwaited(ValueTask1 task) in /_/src/MySqlConnector/Core/ServerSession.cs:line 777 at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in /_/src/MySqlConnector/Core/ResultSet.cs:line 51 at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet() in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlDataReader.cs:line 130 at MySql.Data.MySqlClient.MySqlDataReader.CreateAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlDataReader.cs:line 391
at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(IReadOnlyList1 commands, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 62 at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQueryAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlCommand.cs:line 220 at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.ExecuteSqlRawAsync(DatabaseFacade databaseFacade, String sql, IEnumerable1 parameters, CancellationToken cancellationToken)
at EFCore.Sharding.DbRepository.ExecuteSqlAsync(String sql, ValueTuple2[] paramters) at EFCore.Sharding.DbRepository.UpdateWhere_SqlAsync(IQueryable source, ValueTuple3[] values)
at EFCore.Sharding.LogicDeleteRepository.Delete_SqlAsync(IQueryable source)
at EFCore.Sharding.LogicDeleteRepository.DeleteAsync(Type type, List1 keys) at EFCore.Sharding.LogicDeleteRepository.DeleteAsync[T](List1 keys)
at Wensaint.BaseVue.Services.BaseService2.DeleteAsync(List1 keys) in D:\Rnd\BaseVue\Src\Wensaint.Services\BaseService.cs:line 407
at Wensaint.BaseVue.Api.CRUDApiControllerBase2.DeleteAsync(String id) in D:\Rnd\BaseVue\Src\Wensaint.Api\Controllers\ApiControllerBase.cs:line 176 at lambda_method(Closure , Object ) at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult() at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

其中sysAdmin的实体定义如下:
[Table("sys_admin")]
public class sysAdmin
{
……
}

可以开放下长Sql语句监听吗

请问可以将长Sql语句的监听接口公开,目前所有的Sql内容都统统写入日志很好,但是对于耗时较久的Sql定位不是很方便

DateTime默认改为Local

builder.Property(x => x.Time).HasConversion(v => v, v => DateTime.SpecifyKind(v, DateTimeKind.Local));

var dateTimeConverter = new ValueConverter<DateTime,DateTime>(
v => v,DateTimeKind.Utc));

foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
foreach (var property in entityType.GetProperties())
{
if (property.ClrType == typeof(DateTime) || property.ClrType == typeof(DateTime?))
property.SetValueConverter(dateTimeConverter);
}
}

多租户实现

可以结合Colder.Admin.AntdVue
在用户表里关联Base_DbLink
这样不同用户登录,实现连接不同的数据库
这样可以实现多租户功能

DeleteAsync无效

image

最近正在学习大佬这个框架,发现异步删除不起作用,导致角色管理那里删不掉旧的菜单权限,一直在新增,旧的却没删掉

数据库是MySQL的开源版 mariadb

动态分库分表怎么使用?

需求:
一个基础库里存放有租户和对应的数据库名字,
添加租户时会自动创建一个新的业务数据库,结构一样
API怎么能根据不同的租户去找到对应的数据库名字,然后连接不同业务数据库,
因为我看现在的分库方案好像是必须已知数据库名称.
谢谢!

不支持 SQLSERVER 2008

分页出错,不支持SQLSERVER 2008
报 : OFFSET' 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效。

BulkInsert bool类型问题

大佬您好,最近在学习你的框架的时候,发现批量导入数据时,bool值导入到数据库后都是0了

postgresql驱动JsonElement为jsonb字段类型异常

报异常
Microsoft.EntityFrameworkCore.DbUpdateException : An error occurred while updating the entries. See the inner exception for details.
---- System.InvalidOperationException : Operation is not valid due to the current state of the object.
堆栈跟踪:
ShardingRepository.PackAccessData(Func1 access) 行 74 ShardingRepository.WriteTable[T](List1 entities, Func3 accessData) 行 119 ShardingRepository.Insert[T](List1 entities) 行 179
ShardingRepository.Insert[T](T entity) 行 171
JsonbTest.Test() 行 72
----- Inner Stack Trace -----
JsonElement.WriteTo(Utf8JsonWriter writer)
JsonConverterJsonElement.Write(Utf8JsonWriter writer, JsonElement value, JsonSerializerOptions options)
JsonPropertyInfoNotNullable`4.OnWrite(WriteStackFrame& current, Utf8JsonWriter writer)
JsonPropertyInfo.Write(WriteStack& state, Utf8JsonWriter writer)
JsonSerializer.Write(Utf8JsonWriter writer, Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStack& state)
JsonSerializer.WriteCore(Utf8JsonWriter writer, Object value, Type type, JsonSerializerOptions options)
JsonSerializer.WriteCore(PooledByteBufferWriter output, Object value, Type type, JsonSerializerOptions options)
JsonSerializer.WriteCoreString(Object value, Type type, JsonSerializerOptions options)
JsonSerializer.Serialize[TValue](TValue value, JsonSerializerOptions options)
JsonHandler.ValidateAndGetLength[TAny](TAny value, NpgsqlLengthCache& lengthCache, NpgsqlParameter parameter)
JsonHandler.ValidateObjectAndGetLength(Object value, NpgsqlLengthCache& lengthCache, NpgsqlParameter parameter)
NpgsqlParameter.ValidateAndGetLength()
NpgsqlCommand.ValidateParameters(ConnectorTypeMapper typeMapper)
NpgsqlCommand.ExecuteReaderAsync(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
NpgsqlCommand.ExecuteReader(CommandBehavior behavior)
NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
DbCommand.ExecuteReader()
RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
ReaderModificationCommandBatch.Execute(IRelationalConnection connection)

模型定义:

   public class JsonbModel
    {
        /// <summary>
        /// 
        /// </summary>
        [Key]
        [Column("id")]
        public Guid Id { get; set; } = SequentialGuid.SequentialGuidGenerator.Instance.NewGuid();// = Guid.NewGuid();

        /// <summary>
        /// 
        /// </summary>
        [Column("content", TypeName = "jsonb")]
        public JsonElement Content { get; set; }

        /// <summary>
        /// 创建时间。
        /// </summary>
        [Column("created_on")]
        public DateTime CreatedOn { get; set; } = DateTime.Now;
    }

测试代码:

    public void Test()
    {
        DateTime startTime = DateTime.Now.AddMinutes(-5);
        DateTime endTime = DateTime.MaxValue;

        //配置初始化
        ShardingConfig.Init(config =>
        {
            config.AddAbsDb(DatabaseType.PostgreSql)//添加抽象数据库
                .AddPhysicDbGroup()//添加物理数据库组
                .AddPhysicDb(ReadWriteType.Read | ReadWriteType.Write, conn)//添加物理数据库1
                .SetShardingRule(new JsonbShardingRule())//设置分表规则
                .AutoExpandByDate<JsonbModel>(//设置为按时间自动分表
                    ExpandByDateMode.PerMinute,
                    (startTime, endTime, ShardingConfig.DefaultDbGourpName)
                    );
        });
        var db = DbFactory.GetShardingRepository();
        for (var i= 0;i < 10; i++)
        {
            var content = JsonDocument.Parse("{\"id\": \"test\"}").RootElement;
            db.Insert(new JsonbModel
            {
                Content = content
            });

            var count = db.GetIShardingQueryable<JsonbModel>().Count();
            Console.WriteLine($"当前数据量:{count}");

            Thread.Sleep(50);
        }
    }

最新版本无法删除数据

删除时,报 该实体没有主键标识!请使用[Key]标识主键 错误。

请问是哪里有更新吗,还是新bug

求DbFactory.GetRepository替代方法

上一版本有以下方法:
var db = DbFactory.GetRepository(_conString, _databaseType)


最新版本,DbFactory由public成了internal,请问可存在替换方法获取db

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.