Есть ли имя для шаблона, используемого во внутренних компонентах EF Core? ⇐ C#
-
Гость
Есть ли имя для шаблона, используемого во внутренних компонентах EF Core?
Я хотел понять, как такие расширения, как EF.Functions.Like, реализуются под капотом EF Core, но когда я перешел к их реализации, я увидел, что они ничего не делают, кроме создания InvalidOperationException
public static bool Like (это DbFunctions _, строка? matchExpression, строка? шаблон) => выбросить новое InvalidOperationException(CoreStrings.FunctionOnClient(nameof(Like))); Мне потребовалось некоторое время, чтобы понять, что это расширение используется только тогда, когда EF транслирует его в SQL — он сканирует Expression и если есть вызов расширения, то его следует заменить на конкретный SQL функция. По какой-то причине это было не так очевидно, как с примитивными типами сравнения. И мне теперь интересно, есть ли название у этой конструкции или узора?
Это напоминает мне интерфейсы маркеров, которые служат одной цели, например, при сканировании сборки.
Может ли это быть «расширение маркера»? Или «Расширение только для выражений»? Или никто даже не удосуживается назвать его из-за ограниченного использования (только в выражениях).
Я хотел понять, как такие расширения, как EF.Functions.Like, реализуются под капотом EF Core, но когда я перешел к их реализации, я увидел, что они ничего не делают, кроме создания InvalidOperationException
public static bool Like (это DbFunctions _, строка? matchExpression, строка? шаблон) => выбросить новое InvalidOperationException(CoreStrings.FunctionOnClient(nameof(Like))); Мне потребовалось некоторое время, чтобы понять, что это расширение используется только тогда, когда EF транслирует его в SQL — он сканирует Expression и если есть вызов расширения, то его следует заменить на конкретный SQL функция. По какой-то причине это было не так очевидно, как с примитивными типами сравнения. И мне теперь интересно, есть ли название у этой конструкции или узора?
Это напоминает мне интерфейсы маркеров, которые служат одной цели, например, при сканировании сборки.
Может ли это быть «расширение маркера»? Или «Расширение только для выражений»? Или никто даже не удосуживается назвать его из-за ограниченного использования (только в выражениях).
Мобильная версия