实体框架核心-多租户应用

时间:2020-06-15 18:54:35

标签: c# .net-core entity-framework-core azure-sql-database

我正在寻找基于EF核心和Azure SQL的多租户应用程序。我不想为每个租户创建单独的数据库。相反,我想提供前缀表。例如:

public class Product : BaseEntity
{
    [DisplayName("Name")]
    [MaxLength(100)]
    [Required]
    public string Description { get; set; }

    [DisplayName("SKU")]
    [MaxLength(30)]
    [Required]
    public string SKU { get; set; }

    [DisplayName("Price")]
    [Column(TypeName = "decimal(18,4)")]
    public decimal Price { get; set; }
}

每个租户得到一张表:

  • TenantId1_Products
  • TenantId2_Products
  • TenantId3_Products

新的租户应该能够注册自己,EF迁移应该触发要在数据库中创建其表集。

我知道这可能是一个长镜头,但是使用EF内核完全可以做到吗? 我所能找到的只是动态连接字符串用于分离数据库的示例。

1 个答案:

答案 0 :(得分:2)

您执行此操作的方式最终将与每个租户一个单独的数据库相同或更高。通常,这是通过Customer_ID字段等完成的,它将在行级别将其分隔(然后包括在每个查询中)。

否则,您可能还具有单独的数据库,以便获得更好的隔离/隔离等。如果要通过将客户迁移到其他/更大的环境来扩展客户规模,则额外隔离特别好。

您正在谈论的模型实际上是两全其美,它产生了单独数据库的成本,而没有数据驱动的多租户的好处。