Интерполяция строк в методах raw SQL, как это возможно?
Я только что проверил новые фьючерсы в Entity Framework Core 2.0. В нем есть очень хорошая функция под названием "интерполяция строк в необработанных методах SQL", который описан здесь.
Он говорит, что этот код:
var city = "Redmond";
using (var context = CreateContext())
{
context.Customers.FromSql($@"
SELECT *
FROM Customers
WHERE City = {city}");
}
создает этот запрос:
SELECT *
FROM Customers
WHERE City = @p0
это действительно странно для меня! Как!--2--> метод записывается так, как он имеет только и ввод типа string.
как это понять это интерполированная строка, а затем создайте параметр @p0
запрос для этого? Как я могу написать такой метод, как FromSql
известно о том, как создаются его строковые параметры?
1 ответов
то, как он просыпается FromSql(
принимает FormattableString
.
при использовании $"..."
что возвращает FormatableString
, этот класс позволяет вам проверять переданную строку и видеть все { }
блоки внутри и объекты, которые они представляют. Это позволяет фреймворку заменить те { }
блоки с параметром местозаполнитель @p0
затем создайте новый параметр, используя что-то похожее на new SqlParameter("@p0", formatableString.GetArgument(0))