我刚刚检查了Entity Framework Core 2.0中的新期货.它有一个非常好的功能,称为“原始sql方法中的字符串插值”,描述为
here.
它说这段代码:
var city = "Redmond"; using (var context = CreateContext()) { context.Customers.Fromsql($@" SELECT * FROM Customers WHERE City = {city}"); }
创建此查询:
SELECT * FROM Customers WHERE City = @p0
这对我来说真的很奇怪!如何编写Fromsql方法,并输入类型字符串.
它是如何理解它是一个插值字符串,然后为它创建一个参数@p0查询?如何编写像Fromsql这样的方法,知道它的字符串参数是如何创建的?
解决方法
它的工作方式是
FromSql(
accepts a FormattableString
.
当您使用返回FormatableString
的$“…”时,该类允许您检查传入的字符串并查看其中的所有{}块及其所代表的对象.这允许框架用占位符参数@p0替换那些{}块,然后使用类似于新的sqlParameter(“@ p0”,formatableString.GetArgument(0))的东西创建一个新参数