我们有一个中央接口,通过它进行所有数据库调用(即查询和过程)。但是,当前的实现使用遮罩下的绑定到适当的存储过程签名。方法在设计时返回的显式参数设置。我们可以使用显式绑定到正确的存储过程签名。然而,使用OracleCommand对象乱扔我们的代码(即使只是数据访问层)并不是与数据库无关的。我们已经在数据库接口(以下称为IDatabaseService)中支持与数据库无关的动态查询,如下所示:
int ExecuteNo
我可以使用System.Linq.Expressions.Expression工厂方法在运行时编写表达式树,并使用反射调用LINQ方法,但是动态LINQ是一个更简单的解决方案。如果在编译时LINQ中执行此操作,则将显式强制转换为可空类型:// using static System.Linq.Enumerablex);
动态LINQ支持显