-
-
Notifications
You must be signed in to change notification settings - Fork 303
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mongodb 支持 #152
Mongodb 支持 #152
Conversation
单元测试有些通过不了,比如这个 [Test]
public async Task SearchTest()
{
await ConfigRepository.DeleteAsync(x => true);
var id = Guid.NewGuid().ToString();
var source = new Config
{
AppId = "001",
Id = id,
Group = "group",
Key = "key",
Value = "v",
Description = "d",
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
Status = ConfigStatus.Enabled,
OnlineStatus = OnlineStatus.Online
};
var id1 = Guid.NewGuid().ToString();
var source1 = new Config
{
AppId = "001",
Id = id1,
Group = "g",
Key = "k",
Value = "v",
Description = "d",
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
Status = ConfigStatus.Deleted,
OnlineStatus = OnlineStatus.Online
};
var id2 = Guid.NewGuid().ToString();
var source2 = new Config
{
AppId = "002",
Id = id2,
Group = "g",
Key = "k",
Value = "v",
Description = "d",
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
Status = ConfigStatus.Deleted,
OnlineStatus = OnlineStatus.Online
};
var result = await service.AddAsync(source, "");
Assert.IsTrue(result);
var result1 = await service.AddAsync(source1, "");
Assert.IsTrue(result1);
var result2 = await service.AddAsync(source2, "");
Assert.IsTrue(result2);
var configs = await service.Search("001", "", "", "");
Assert.IsNotNull(configs);
Assert.AreEqual(1, configs.Count);
var configs1 = await service.Search("", "o", "", "");
Assert.IsNotNull(configs1);
Assert.AreEqual(1, configs1.Count);
var configs2 = await service.Search("", "", "e", "");
Assert.IsNotNull(configs2);
Assert.AreEqual(1, configs2.Count);
} Search 实现: public Task<List<Config>> Search(string appId, string group, string key, string env)
{
var q = GetRepository<Config>(env).SearchFor(c => c.Status == ConfigStatus.Enabled && c.Env == env);
if (!string.IsNullOrEmpty(appId))
{
q = q.Where(c => c.AppId == appId);
}
if (!string.IsNullOrEmpty(group))
{
q = q.Where(c => c.Group.Contains(group));
}
if (!string.IsNullOrEmpty(key))
{
q = q.Where(c => c.Key.Contains(key));
}
return q.ToListAsync();
} 这是因为 Config 实体没有给 Env 属性赋值,Env 为 null,所以在查询的时候 c.Env == env 条件不成立, |
另外SysLog 的 Id 为 int 类型,生成Id 有更好的方式吗? |
太感谢了,我一直想做这个功能。 |
@pengqian089 |
@kklldog 可以的,我当时就想过了,抽象出Repository,那样只需要维护一个 Service层就好了。 |
@pengqian089 |
@kklldog 好的,如果有需要帮忙的也可以跟我说 |
@kklldog 你好,我修改了一部分 注入方式 ,IEventRegister 、 ConfigStatusUpdateRegister 、ISettingService 的实现重构了一部分,还没有合并到当前PR。 你看看这样的思路可行吗? 如果可行,剩余的部分我也按照这样的方式重构 |
wow,感谢。 |
新增对 IFreeSqlFactory 实现 DeaultFreesqlFactory,使用默认连接串。因为并不是所有的 repository 都需要根据 env 来切换连接串的。 |
我实现了一个 Unitofwork 模式来包装事务,不知道目前这个抽象能不能适配到 mongodb 上。 |
@kklldog mongodb支持有限的事务,只有在集群部署下才可以使用。 |
mongodb 4.0 以上版本 & 副本集(4.0+)| 分片集(4.2+) 如果是单服务器部署,可以将独立部署转换为单节点副本集启用事务 好的,我直接实现了一个空的 Uow,你可以去完善它,要么干脆就这样。 |
Add an empty UoW for mongodb;
目前为止,Freesql 这边基本功能应该差不多了。 |
另外还有一个小问题,syslog表原来为了排序性能主键直接选择了自增。但是看了 mongodb 搞自增应该挺麻烦(估计其他非关系数据库都会麻烦),so 我干脆改成 string 了。但是改成 string 后就不能按 Id desc了。所以我在 SysLogService 里把 Search 方法里的排序指定了 LogTime,但是切到 mongodb 下貌似也在报错,有空的话帮忙看看,谢谢; |
修复批量更新,空项集合报错的bug; 修复分页排序的问题
这个可以解决 ,如果要改回自增 id ,我也会去适配 |
不用,咱就用string得了,省得对接其他存储的时候麻烦。 |
Add master-pr-ci.yml;
重构 AppService 的测试用例;
ee8b955
to
eb9a34d
Compare
Thanks very much! |
暂时还没测试,前端编译了一下午,还在编译
有什么办法嘛?