Entity framework 在ExecuteStoreQuery EF中执行存储的过程。这是EF中的错误吗?
尝试使用以下代码在EF中执行存储的过程:Entity framework 在ExecuteStoreQuery EF中执行存储的过程。这是EF中的错误吗?,entity-framework,Entity Framework,尝试使用以下代码在EF中执行存储的过程: var params = new object[] {new SqlParameter("@FirstName", "Bob")}; return this._repositoryContext.ObjectContext.ExecuteStoreQuery<ResultType>("GetByName", params); 上面的ExecuteStoreQuery代码有什么错?使用ExecuteQuery函数,而不是ExecuteStor
var params = new object[] {new SqlParameter("@FirstName", "Bob")};
return this._repositoryContext.ObjectContext.ExecuteStoreQuery<ResultType>("GetByName", params);
上面的ExecuteStoreQuery代码有什么错?使用ExecuteQuery函数,而不是ExecuteStoreQuery,它更适合于“特殊”查询
var parameters=newobjectparameter[]{newobjectparameter(“FirstName”,“Bob”)};
返回此参数。_repositoryContext.ObjectContext.ExecuteFunction(“GetByName”,参数);
存储过程也可以映射为上下文中的函数,因此可以用作类型化方法。看一看。忽略
params
是保留字这一事实
您认为您的查询需要:
var params = new object[] {new SqlParameter("@FirstName", "Bob")};
return this._repositoryContext.ObjectContext.ExecuteStoreQuery<ResultType>("exec GetByName @FirstName", params);
var-params=new-object[]{new-SqlParameter(“@FirstName”,“Bob”)};
返回此参数。_repositoryContext.ObjectContext.ExecuteStoreQuery(“exec GetByName@FirstName”,参数);
还应该说,如果该过程是数据库和数据模型的标准部分,那么您应该这样做,以便它可以直接在您的上下文中使用。这是我在EF中使用SP时所做的,如果您有多个参数:-
public virtual ObjectResult<GetEpisodeCountByPracticeId_Result> GetEpisodeCountByPracticeId(Nullable<int> practiceId, Nullable<System.DateTime> dat1)
{
SqlParameter practiceIdParameter = practiceId.HasValue ?
new SqlParameter() { ParameterName = "practiceId", Value = practiceId, SqlDbType = SqlDbType.Int } :
new SqlParameter() { ParameterName = "practiceId", SqlDbType = SqlDbType.Int };
SqlParameter dat1Parameter = dat1.HasValue ?
new SqlParameter() { ParameterName = "dat1", Value = dat1, SqlDbType = SqlDbType.DateTime }:
new SqlParameter() { ParameterName = "dat1", SqlDbType = SqlDbType.DateTime };
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<GetEpisodeCountByPracticeId_Result>("exec GetEpisodeCountByPracticeId @practiceId, @dat1", practiceIdParameter, dat1Parameter);
}
公共虚拟对象结果GetEpisodeCountByPracticeId(可为null的practiceId,可为null的dat1)
{
SqlParameter practiceIdParameter=practiceId.HasValue?
新的SqlParameter(){ParameterName=“practiceId”,Value=practiceId,SqlDbType=SqlDbType.Int}:
新的SqlParameter(){ParameterName=“practiceId”,SqlDbType=SqlDbType.Int};
SqlParameter dat1Parameter=dat1.HasValue?
新的SqlParameter(){ParameterName=“dat1”,Value=dat1,SqlDbType=SqlDbType.DateTime}:
新的SqlParameter(){ParameterName=“dat1”,SqlDbType=SqlDbType.DateTime};
返回((IObjectContextAdapter)this.ObjectContext.ExecuteStoreQuery(“exec GetEpiosodeCountByPracticeId@practiceId,@dat1”,practiceIdParameter,dat1Parameter”);
}
如果您不在commandText属性中添加参数(例如@practiceId),则会收到收到的错误如何使用ExecuteStoreQuery方法实现?我无法控制将生成什么样的sql语句。这完全取决于ExecuteStoreQuery方法。谢谢,伙计。。“exec”一词是可选的。测试时返回此参数。_repositoryContext.ObjectContext.ExecuteStoreQuery(“GetByName@FirstName”,params)并正常工作!
var params = new object[] {new SqlParameter("@FirstName", "Bob")};
return this._repositoryContext.ObjectContext.ExecuteStoreQuery<ResultType>("exec GetByName @FirstName", params);
public virtual ObjectResult<GetEpisodeCountByPracticeId_Result> GetEpisodeCountByPracticeId(Nullable<int> practiceId, Nullable<System.DateTime> dat1)
{
SqlParameter practiceIdParameter = practiceId.HasValue ?
new SqlParameter() { ParameterName = "practiceId", Value = practiceId, SqlDbType = SqlDbType.Int } :
new SqlParameter() { ParameterName = "practiceId", SqlDbType = SqlDbType.Int };
SqlParameter dat1Parameter = dat1.HasValue ?
new SqlParameter() { ParameterName = "dat1", Value = dat1, SqlDbType = SqlDbType.DateTime }:
new SqlParameter() { ParameterName = "dat1", SqlDbType = SqlDbType.DateTime };
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<GetEpisodeCountByPracticeId_Result>("exec GetEpisodeCountByPracticeId @practiceId, @dat1", practiceIdParameter, dat1Parameter);
}