C# 如何确定子类或孙类是否需要租户?

C# 如何确定子类或孙类是否需要租户?,c#,.net,multi-tenant,hierarchical-data,C#,.net,Multi Tenant,Hierarchical Data,假设您有一个租户,该租户有许多用户,这些用户有许多帐户,这些帐户有许多事务 您在树下多远处添加租户属性? 您在树的下面多远处添加用户ID? 或者你只需要有父母的id 假设用户在未首先访问子实体的父实体之前不会有意访问该子实体。在蛞蝓中,它将类似于: baseurl.com/accounts/{accountId/transactions/{transactionId} public class Tenant { public long Id { get; set; } publi

假设您有一个租户,该租户有许多用户,这些用户有许多帐户,这些帐户有许多事务

您在树下多远处添加租户属性?
您在树的下面多远处添加用户ID?
或者你只需要有父母的id

假设用户在未首先访问子实体的父实体之前不会有意访问该子实体。在蛞蝓中,它将类似于:
baseurl.com/accounts/{accountId/transactions/{transactionId}

public class Tenant
{
    public long Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<Account> Accounts { get; set; }
    public virtual ICollection<Transaction> Transactions { get; set; }
}

public class User
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Account> Accounts { get; set; }
}

public class Account
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string UserId { get; set; }
    public virtual ICollection<Transaction> Transactions { get; set; }
}

public class Transaction
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string UserId { get; set; }
    public string AccountId { get; set; }
}
公共类租户
{
公共长Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection用户{get;set;}
公共虚拟ICollection帐户{get;set;}
公共虚拟ICollection事务{get;set;}
}
公共类用户
{
公共长Id{get;set;}
公共长租户{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection帐户{get;set;}
}
公共类帐户
{
公共长Id{get;set;}
公共长租户{get;set;}
公共字符串用户标识{get;set;}
公共虚拟ICollection事务{get;set;}
}
公共类事务
{
公共长Id{get;set;}
公共长租户{get;set;}
公共字符串用户标识{get;set;}
公共字符串AccountId{get;set;}
}

我倾向于在属于租户的所有事务上使用TenantId。我认为这是为了安全,但我的自然假设是用户ID就足够了。例如,即使事务比用户低两个级别,我不认为我应该允许任何知道事务ID的人访问事务,而不同时被访问拥有帐户的用户。

我们在添加TenantId时遵循的规范是所有主要实体。例如,用户和帐户都应该拥有TenantId。因为事务是用户和帐户的从属实体,因此不能在不引用基本实体(帐户/用户)的情况下提取,没有租户的授权

经验法则是根据租户对要分组/分类的主要业务实体进行分类。(用户、帐户等)因此,在数据库中检索或更新数据时,在对映射表或子表执行任何操作之前,都会进行适当的租户筛选。因此,请根据域对象明智地包括TenantId列