Как правильно настроить мультитенантность с помощью общей схемы в EF Core? - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над созданием мультитенантного приложения.У меня есть сущность Tenant, сущность User и несколько других сущностей, которые имеют свойство TenantId.

Я начал добавлять дочерние ссылки на свою сущность Tenant, но просмотр других примеров кода заставляет меня поверить, что это не так.«правильный» способ заставить дочерние объекты правильно зарегистрировать внешний ключ TenantId.Однако, если я не добавляю дочерние коллекции в свою сущность Tenant, миграции не регистрируют внешний ключ TenantId для детей.

Каков правильный (или предлагаемый) способ управления этими отношениями вшаблон мультитенантной схемы Shared Schema?

Например, предположим, что у меня есть Арендатор с Пользователями, у всех из которых есть доступ к Такси, Гаражам и Зонам в пределах их Арендатора.

Примечание:Я использую базовый класс в своем реальном коде, но решил, что это усложнит пример, поэтому я намеренно все изложил.

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; }
}

1 Ответ

0 голосов
/ 22 декабря 2018

Если в моделях, подобных приведенной ниже, у вас в качестве виртуального свойства будет Арендатор, то

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...