首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多租户单DB中的独立租户序列

多租户单DB中的独立租户序列
EN

Stack Overflow用户
提问于 2022-10-03 14:49:58
回答 1查看 103关注 0票数 1

我有一个为多个租户服务的asp.net核心Web。我有一个针对所有租户的单一PostgreSQL数据库。租户由TenantId列分隔,该列使用EF核心查询筛选器应用。我使用的是代码优先的迁移方法。所有这些都如预期的那样工作。

但是,我很困惑如何最好地管理每个租户的序列。例如,每个租户都可以有一个作业列表,每个作业都具有下一个增量值。我如何实现这一点,以便每个租户都有自己的增量作业编号集?

理想情况下,我不希望必须管理每个租户的序列,因为这很快就会变得难以管理。

是否有一种使用EF核心实现这一目标的“最佳实践”?或者,我是否需要手动/在迁移之外执行一些操作?

谢谢你的帮助/想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-03 15:20:47

我倾向于创建自己的Sequences表,该表与任何其他实体一样使用DbContext进行管理。然后创建一些管理获取下一个序列值的ISequenceService。最后,我实现了一个IStartupFilter,它将为每个租户插入应用程序所需的所有序列。此模式将与您的判别器列模式很好地匹配。

我的序列对象看起来类似于:

代码语言:javascript
复制
public class Sequence: BaseEntity {
    public string name {get;set;}
    public int nextValue {get;set;} = 1;
    public string prefix {get;set;}
    public string postfix {get;set;}
}

我更喜欢这个路径,因为它提供了一个更不依赖于数据库的实现。它还允许围绕序列进行更多的租户定制,例如每个租户希望自己的序列从何处开始、修复前后或其他您的用户可以想到的东西。

这种方法的一个缺点是并发性。如果有两个用户同时尝试增加序列,则可能最终得到dupe序列值。一个实际的数据库序列可以更好地处理这个问题,但是使用EF并不是不可能的。

如果您对这种方法感兴趣,查看处理并发的文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73937191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档