【发布时间】:2025-12-29 04:05:11
【问题描述】:
我有一个实体框架,基于代码优先的应用程序,我必须制作多租户,也就是说,现在大约有六个“*”实体需要引用特定的租户 ID。 (当我们有 100 多个用户时,不,我们不会维护单独的模式,所以请不要这样建议。:))
通过像 EF 一样对数据访问进行面向对象的抽象,我试图想象如何到达一个不需要更改 dbcontext 之外的任何底层代码来完成这项工作的地方.本质上,我想将这些作为我的成功标准:
- 不必更改现有数据访问代码。它有很多,很多都是程序性的和重复的。不幸的是,没有存储库类,尽管我很想到达那里,但我不得不推迟技术债务。
- 查询过滤租户 ID 上的*对象。例如,现有代码获取 context.Members.Where(x => x.IsAwesome) ,但还神奇地过滤到租户 ID 等于租户 ID 的位置(租户上下文可用于每个请求并且可用于注入)。
- 添加*实体也会分配租户 ID。换句话说,代码执行了 context.Members.Add(newEntity) 之类的操作,newEntity 神奇地将其 TenantID 属性设置为可通过该注入组件获得的 ID。
似乎可以通过实体类本身来设置租户 ID(没有考虑过注入,某种垫片卡在那里),但我不确定如何最好地添加用于查询的附加过滤器。
【问题讨论】:
-
如何达到成功标准?另见最后一句话。
-
所以您想完全保留现有代码(上下文代码除外)?
-
那是理想的世界,是的。不反对修改实体类型本身。
标签: c# sql-server asp.net-mvc entity-framework