Coldairarrow / EFCore.Sharding

Database Sharding For EFCore
Apache License 2.0
694 stars 144 forks source link

nuget上的库没有及时更新吧? #7

Closed lable closed 4 years ago

lable commented 4 years ago

api接口和例子工程不一样,而且配置了postgresql数据库,使用分表api后仍然会提示未安装sqlite提供器

Coldairarrow commented 4 years ago

请问api接口和例子工程不一样啥意思

Coldairarrow commented 4 years ago

文档已修复 使用分表api后仍然会提示未安装sqlite提供器 麻烦提供截图

lable commented 4 years ago

nuget上3.3版,大概的代码是这样子

1、注入: var connStr = Configuration.GetConnectionString("DefaultConnection"); services.UseEFCoreSharding(DatabaseType.PostgreSql, connStr, config => { config.AddAbsDb(DatabaseType.PostgreSql, ShardingConfig.DefaultAbsDbName) .AddPhysicDbGroup()//添加物理数据库组 .AddPhysicDb(ReadWriteType.Read | ReadWriteType.Write, connStr)//添加物理数据库1 .SetShardingRule(new PosOrderMonthShardingRule())//设置分表规则 .AutoExpandByDate(//设置为按时间自动分表 startTime, ExpandByDateMode.PerMonth, ShardingConfig.DefaultDbGourpName );

2、然后调用 DbFactory.GetShardingRepository() 就报提示未安装sqlite提供器

已经切换成使用EFCore.Sharding源代码模式了场景暂时不能还原。

Coldairarrow commented 4 years ago

现在问题还能复现吗?能复现的话截图看下

lable commented 4 years ago
微信截图_20200422111718
lable commented 4 years ago
微信截图_20200422111718

nuget包 v3.1.3 ,做了个单元测试重现问题

Coldairarrow commented 4 years ago

你搞错了,单元测试里面有个Startup 这里面有默认初始化用SQLLit

lable commented 4 years ago

可以尝试下,新做的单元测试:

using EFCore.Sharding; using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Xunit;

namespace EFCore.Nuget.Tests { public class UnitTest1 { public class JsonbShardingRule : AbsShardingRule { public override DateTime BuildDate(JsonbModel obj) { return obj.CreatedOn; } }

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

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

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

    readonly string conn = "XXXX";

    [Fact]
    public void Test1()
    {
        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>(//设置为按时间自动分表
                    startTime,
                    ExpandByDateMode.PerMonth
                    );
        });

        var db = DbFactory.GetShardingRepository();

        var count = db.GetIShardingQueryable<JsonbModel>().Count();
    }
}

}

Coldairarrow commented 4 years ago
using EFCore.Sharding;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Xunit;

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

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

        /// <summary>
        /// 创建时间。
        /// </summary>
        [Column("created_on")]
        public DateTime CreatedOn { get; set; } = DateTime.Now;
    }
    public class JsonbShardingRule : AbsShardingRule<JsonbModel>
    {
        public override DateTime BuildDate(JsonbModel obj)
        {
            return obj.CreatedOn;
        }
    }
    public class UnitTest1
    {
        readonly string conn = "XXXX";
        [Fact]
        public void Test1()
        {
            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.PerMonth,
                        (startTime, endTime, ShardingConfig.DefaultDbGourpName)
                        );
            });

            var db = DbFactory.GetShardingRepository();

            var count = db.GetIShardingQueryable<JsonbModel>().Count();
        }
    }
}

真的复现不了,不是报缺SQLLit包错误

lable commented 4 years ago

有没有可能是只安装了 EFCore.Sharding.PostgreSql 这一个包的原因?

`

`