Мне часто нужно вызывать скалярные функции, определенные на SQL Server, из моих веб-приложений (ASP.NET Core / EF Core). Поскольку эти функции являются простыми вспомогательными функциями, и я также использую их много, я использую общий шаблон для вызова этих скалярных функций - с помощью новых типов запросов, доступных в EF Core 2.1.
Поскольку я относительно новичок в EF Core, мой вопрос в том, может ли этот шаблон вызвать проблемы и / или есть ли лучшее решение или лучшая практика для вызова скалярных функций. Решение работает, и я пока не вижу никаких проблем, но, например, мне было интересно, может ли использование одного и того же типа запроса для разных функций привести к неожиданным значениям или странному поведению из-за поведения кэширования / отслеживания и т. Д. В EF Core - это скорее чувство кишки.
Итак, вот схема:
Вместо того, чтобы определять разные типы сущностей для каждой скалярной функции, я просто определяю один общий тип:
public class PrimitiveDto<T>
{
public T Value { get; set; }
}
В моем классе контекста я регистрирую эти типы для каждого возвращаемого типа, который я ожидаю от скалярных функций, которые я хочу использовать - поэтому для всех скалярных функций, возвращающих 'int', у класса контекста будет одна дополнительная запись, подобная этой:
public virtual DbQuery<PrimitiveDto<int>> BasicIntDto { get; set; }
В каждой части приложения, где я хочу вызвать скалярную функцию, возвращающую 'int', я просто использую один и тот же шаблон:
context.BasicIntDto.FromSql("SELECT <FUNCTION> AS Value")
Используя этот шаблон, я могу вызывать любое количество функций одинаково, без определения дополнительных типов или расширения класса контекста.
Пожалуйста, дайте мне знать, могу ли я наткнуться на эту ловушку. Большое спасибо.