Как применять паттерн спецификация, если в реализации репозитория свои сущности
У меня есть доменная сущность User:
public class User
{
public long Id { get; set; }
public State State { get; set; }
public bool IsAdmin { get; set; }
public bool IsBanned { get; set; }
}
На уровне доступа к данным я использую ORM Entity Framework Core, соответственно там же есть сущность User для работы с ORM:
public class User
{
public long Id { get; set; }
public State State { get; set; }
public bool IsAdmin { get; set; }
public bool IsBanned { get; set; }
public int? CurrentVkId { get; set; }
public Vk? CurrentVk { get; set; }
public List<Vk> Vks { get; set; } = new();
public List<Payment> Payments { get; set; } = new();
public List<Subscribe> Subscribes { get; set; } = new();
}
И к примеру следующая спецификация (использую Ardalis.Specification):
public sealed class BannedUsersSpecification : Specification<User>
{
public BannedUsersSpecification()
{
Query.Where(u => u.IsBanned);
}
}
Спецификация написана именно для доменной сущности, как я могу применить ее для сущности, определенной в слое доступа к данным?
Я привел простой пример, а если бы у сущности домена были свойства, которые хранятся как-то по-другому в сущности EF, скажем, в JSON к примеру, как тогда применять спецификацию?
Или если бы мы вместо ORM использовали бы чистый SQL, что тогда?