【发布时间】:2019-08-14 18:28:42
【问题描述】:
我必须设计一个多租户应用程序,我需要为同一模型中的每个租户提供自定义字段。
客户 1 需要使用一些自定义字段,客户 2 需要管理同一张表中的其他字段等等..
这是一个例子: 同一张表(票)有一个共同的(基本)字段列表,那么每个租户应该在模型中有他的附加列:
我想先实现一个 EF Code 的 .Net Core Web 应用程序。
namespace Models.Base
{
public class TicketBase
{
public int Id { get; set; }
public string Description { get; set; }
public Datetime CreationDate { get; set; }
}
}
租户 1
namespace Models.Tenant1
{
public class Ticket : TicketBase
{
public string CustomerName { get; set; }
public Datetime DateCustomerCall { get; set; }
}
}
租户 2
namespace Models.Tenant2
{
public class Ticket : TicketBase
{
public string AnotherDescription { get; set; }
public Datetime AnotherDate { get; set; }
}
}
以这种方式设计模型是否正确,或者对于这个非常常见的问题有不同的方法?
【问题讨论】:
-
没有一种万能的解决方案。这在很大程度上取决于您的模型有何不同、需求变化的频率等。
-
嗨,我想使用这种方法 stackify.com/writing-multitenant-asp-net-core-applications 或 benfoster.io/blog/… 但似乎它们共享相同的模型
-
如果 TicketBase 类代表简单的票证属性并且您永远不会将 Ticketbase 类实例化为对象,那么您可以考虑将这些属性作为 ITicket 接口的一部分而不是 TicketBase 类。并让多个租户实现 ITicket + 他们的附加属性。这也将帮助您利用多租户 DI 注入,您可以在其中注册租户特定的票证对象并在您的代码中根据租户通过 ITicket 接口解析它们……这只是您设计的另一种思考方式。
-
谢谢 Asif,您将如何在 .net core EF 中实现它?
标签: c# entity-framework-core multi-tenant