实体框架4.1原始SQL

实体框架4.1原始SQL,sql,entity-framework-4.1,Sql,Entity Framework 4.1,我正在使用EntityFramework4.1开发一个ASP.NETMVC3应用程序。对于需要执行的特定复杂查询,我决定编写一个原始SQL查询,并将其传递给内置的dbSet.SqlQuery方法 我有一个如下所示的服务方法,其中我将SQL查询分配给一个名为query的字符串变量。由于查询传递了两个参数,因此我对它们进行了参数化,以防止SQL注入 public IList<User> GetAvailableLocums(int shiftID, int shiftDateID) {

我正在使用EntityFramework4.1开发一个ASP.NETMVC3应用程序。对于需要执行的特定复杂查询,我决定编写一个原始SQL查询,并将其传递给内置的dbSet.SqlQuery方法

我有一个如下所示的服务方法,其中我将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 IList getAvailableDocuments(int-shiftID,int-shiftDateID)
{
var query=“选择……其中t1=@p0和t2=@p1”;
ObjectParameter\u shiftID=新的ObjectParameter(“p0”,shiftID);
ObjectParameter\u shiftDateID=新的ObjectParameter(“p1”,shiftDateID);
对象[]参数=新对象[]{u shiftID,\u shiftDateID};
返回_UoW.User.GetWithRawSql(查询,参数).ToList();
}
然后,我将查询和参数传递给存储库中的一个方法,该方法为我执行查询

public IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
            return dbSet.SqlQuery(query, parameters).ToList();
}
public IEnumerable GetWithRawSql(字符串查询,参数对象[]参数)
{
返回dbSet.SqlQuery(查询,参数).ToList();
}
我知道查询是正确的,因为我已经在SQLServerManagementStudio中对其进行了测试,但是,当我尝试运行此代码时,我当前遇到以下错误

对象类型System.Data.Objects.ObjectParameter中不存在映射 到已知的托管提供程序本机类型

有人对我如何解决这个问题有什么建议吗


谢谢你的帮助。

通过快速的谷歌搜索,它看起来像是你的特写。我认为您缺少设置SQL查询的返回类型:

return dbSet.SqlQuery<TEntity>(query, parameters).ToList();
返回dbSet.SqlQuery(查询,参数).ToList();

这只是告诉实体框架如何映射它

通过快速的谷歌搜索,它看起来像是你的特写。我认为您缺少设置SQL查询的返回类型:

return dbSet.SqlQuery<TEntity>(query, parameters).ToList();
返回dbSet.SqlQuery(查询,参数).ToList();
这只是告诉实体框架如何映射它

各位

问题是我正在使用ObjectParameter创建参数。我改为SqlParameter,效果很好。见下文

从此改变

ObjectParameter _shiftID = new ObjectParameter("p0", shiftID);
对此

SqlParameter _shiftID = new SqlParameter("p0", shiftID);
它成功了。希望这对其他人有帮助。

各位

问题是我正在使用ObjectParameter创建参数。我改为SqlParameter,效果很好。见下文

从此改变

ObjectParameter _shiftID = new ObjectParameter("p0", shiftID);
对此

SqlParameter _shiftID = new SqlParameter("p0", shiftID);

它成功了。希望这对其他人有帮助。

对不起,这不是解决方案。对不起,这不是解决方案