Open MrShenf opened 4 months ago
@MrShenf
是否可以发一下的dbcontext是如何构建的是否没有吧LazyServiceProvider进行赋值
你的抽象dbcontext是否是参考sharding-core源码的
使用的https://github.com/xuejmnet/ShardingWithFramework 这个Demo测试的
protected override bool ShouldFilterEntity
return false;
}
protected override Expression<Func<TEntity, bool>> CreateFilterExpression
return expression;
}
EFCore的ServiceProvider是scope类型的你把app.serviceProvider给了一个静态变量他是全局单例的serviceprovider怎么能给abpcontext的LazyServiceprovider呢这样肯定是有问题呀
Update-Database 映射 数据库的时候就会报null值错误
两者的生命周期都不一样
你这玩意写的就有问题 CreateFilterExpression当然不可以这么处理了你依赖注入的生命周期弄错了不可以吧scope的服务提供者给静态属性的
那这个要怎么处理呢 那个是abp内置的 我只是测试重现这个问题
这个是abp的我不是很清楚
AbpDbContext
你看一下AbstractShardingAbpDbContex的LazyServiceProvider
打断点看看
这里是正常的可以获取到的
这里是正常的可以获取到的
我看了代码确定是这样的吗
那两个方法我测试报错override了 其他没动
原因应该是 AbstractShardingAbpDbContext 继承AbpDbContext CreateFilterExpression是程序启动就会执行注册 此时
LazyServiceProvider为空导致 查询的时候获取public IDataFilter DataFilter => LazyServiceProvider.LazyGetRequiredService
@MrShenf 主要是我没有你运行的代码也不是很清楚abp我本身不使用abp所以可能并不能对您发送的问题有太好的建议提供,不过附加一下调试源码应该可以了解更详细的信息(#^.^#)
这个项目里面有两个版本,main里面的AbstractShardingAbpDbContext写法和le7.x里面的写法不一样,使用main里面可以base.LazyServiceProvider有值
是这个配置造成的,麻烦请教一下,这个配置可以去掉吗
@MrShenf 使用main分支的而不是le7的,le7是sharding-core版本号小于7的时候的案例
是这个配置造成的,麻烦请教一下,这个配置可以去掉吗
这个配置不可以去掉去掉会有问题,原则上来讲不会是这个配置的问题才对
如果把这个配置去掉那么abp就没办法实现分表分库了
您写的实例项目我测试了一下,注释掉 override AbpDbContext那两个方法 base.LazyServiceProvider确实有值了image
使用这个配置可以吗 这样base.LazyServiceProvider有值