I've just checked the new futures in Entity Framework Core 2.0. There is a really nice feature in it called "String interpolation in raw SQL methods" which is described here.
It says that this code:
var city = "Redmond";
using (var context = CreateContext())
{
context.Customers.FromSql($@"
SELECT *
FROM Customers
WHERE City = {city}");
}
creates this query:
SELECT *
FROM Customers
WHERE City = @p0
It is really strange to me! How FromSql
method is written as it has just and input of type string.
How does it understand it is an interpolated string, and then create a parameter @p0
query for it? How can I write a method like FromSql
aware of how its string parameters are created?
The way it woks is FromSql(
accepts a FormattableString
.
When you use $"..."
that returns a FormatableString
, that class allows you to inspect the passed in string and see all of the { }
blocks inside of and the objects they represent. This allows the framework to replace those { }
blocks with a placeholder parameter @p0
then create a new parameter using something similar to new SqlParameter("@p0", formatableString.GetArgument(0))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With