我正在使用 Entity Framework 4.1 开发一个 ASP.Net MVC 3 应用程序。对于我需要执行的特定复杂查询,我决定编写一个原始 SQL 查询并将其传递给内置的dbSet.SqlQuery方法。
我有一个如下所示的 Service 方法,我将 SQL 查询分配给一个名为query的字符串变量。由于查询传递了两个参数,我已将这些参数化以防止 SQL 注入。
public IList<User> GetAvailableLocums(int shiftID, int shiftDateID)
{
var query ="Select .... where t1 = @p0 and t2 = @p1";
ObjectParameter _shiftID = new ObjectParameter("p0", shiftID);
ObjectParameter _shiftDateID = new ObjectParameter("p1", shiftDateID);
object[] parameters = new object[] { _shiftID, _shiftDateID };
return _UoW.User.GetWithRawSql(query, parameters).ToList();
}
然后我将查询和参数传递给我的存储库中为我执行查询的方法。
public IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
return dbSet.SqlQuery(query, parameters).ToList();
}
我知道查询是正确的,因为我在 SQL Server Management Studio 中对其进行了测试,但是,当我尝试运行此代码时,我目前收到以下错误
不存在从对象类型 System.Data.Objects.ObjectParameter 到已知托管提供程序本机类型的映射
有人对我如何解决这个问题有任何建议吗?
谢谢你的帮助。