【问题标题】:What is the Proper Way To Configure a Multi Tenancy with Shared Schema in EF Core在 EF Core 中使用共享架构配置多租户的正确方法是什么
【发布时间】:2018-12-23 02:33:47
【问题描述】:

我正在设计一个多租户应用程序。我有一个租户实体、用户实体和多个其他具有 TenantId 属性的实体。

我开始向我的租户实体添加子引用,但查看其他代码示例让我相信这不是让子实体正确注册 TenantId 外键的“正确”方法。但是,如果我不将子集合添加到我的租户实体,则迁移不会将 TenantId 外键注册到子集合。

在共享架构多租户模式中管理这些关系的正确(或建议)方法是什么?

例如,假设我有一个租户,其用户都可以访问其租户内的出租车、车库和区域。

注意:我在我的真实代码中使用了一个基类,但我认为这会使示例变得复杂,所以我故意将所有内容都拼写出来。

public class Tenant
{
    public long Id { get; set; }
    public string Name { get; set; }
    public ICollection<User> Users { get; set; }

    // Should the below properties be left out?
    public ICollection<Taxi> Taxis { get; set; }
    public ICollection<Garage> Garages { get; set; }
    public ICollection<Zone> Zones { get; set; }
}

public class User
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

public class Taxi
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string Name {get; set; }
}

public class Garage
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string Name { get; set; }
}

public class Zone
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string Name { get; set; }
}

【问题讨论】:

    标签: c# .net multi-tenant


    【解决方案1】:

    如果您将租户作为模型中的虚拟属性,如下所示,

    public class User
    {
        public long Id { get; set; }
        public long TenantId { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public virtual Tenant TenantDetails {get;set;}
    }
    

    您可能需要将所有依赖实体写入租户下。

    但是,如果不是这种情况,您不必将依赖实体用作租户实体下的子实体。通常,我们认为租户是应用程序的元数据或更高级别的域对象。像业务对象这样的其余实体可以具有 Tenant 属性来识别记录的租户详细信息,但恕我直言,从 EF 建模的角度来看,实时使用不需要反之亦然。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2020-03-14
      • 2021-11-26
      • 2023-02-13
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多