Closed lable closed 4 years ago
请问api接口和例子工程不一样啥意思
文档已修复 使用分表api后仍然会提示未安装sqlite提供器 麻烦提供截图
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
2、然后调用 DbFactory.GetShardingRepository() 就报提示未安装sqlite提供器
已经切换成使用EFCore.Sharding源代码模式了场景暂时不能还原。
现在问题还能复现吗?能复现的话截图看下
nuget包 v3.1.3 ,做了个单元测试重现问题
你搞错了,单元测试里面有个Startup 这里面有默认初始化用SQLLit
可以尝试下,新做的单元测试:
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 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();
}
}
}
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包错误
有没有可能是只安装了 EFCore.Sharding.PostgreSql 这一个包的原因?
`
`
api接口和例子工程不一样,而且配置了postgresql数据库,使用分表api后仍然会提示未安装sqlite提供器