我在传入一个参数时成功调用存储过程,但现在我的代码第一个dbcontext,我想保持简单,但我根据我看到的一些答案改变了代码:/ not working
好的,首先,这里的代码可以正常工作:
#include <stdio.h>
int main()
{
char name[100],stdid[100],adv[100],subject[6][100],code[6][30];
int sem,in,total,a;
int credit[6];
printf ("SUBJECT REGISTRATION FORM \n \n");
printf ("1) STUDENT NAME: ");
fflush (stdin);
gets (name);
printf ("2) STUDENT ID: ");
scanf ("%s",&stdid);
printf ("3) SEMESTER: ");
scanf ("%d",&sem);
printf ("4) ACADEMIC ADVISOR: ");
fflush (stdin);
gets (adv);
for (in=0; in<6 ;in++)
{
printf ("SUBJECT CODE %d: ",in + 1);
fflush (stdin);
gets (code[in]);
printf ("SUBJECT NAME %d: ",in + 1);
fflush (stdin);
gets (subject[in]);
printf ("SUBJECT CREDIT %d: ",in + 1);
fflush (stdin);
scanf ("%d",&credit[in]);
total=total+credit[in];
}
printf (" Universiti of Gambang \n");
printf (" Subjects Registration Form \n");
printf ("======================================================================= \n");
printf ("Name: %s \n",name);
printf ("Student ID: %s \n",stdid);
printf ("Total Subjects: %d \n",in);
printf ("--------------------------------------------------------------- --------- \n");
printf ("Subject Name Subject code Credit \n");
for (a=0;a<in;a++);
{
printf (" %d %s %s %d \n",a ,subject[a] ,code[a] ,credit[a]);
}
printf ("Total Credit: %d \n",total);
printf ("Academic Advisor: %s \n",adv);
return 0;
}
上面的代码工作正常,但这里的代码不起作用(我传递了3个参数)
var param = new SqlParameter("@dt", myTime);
var result = _db.Database.SqlQuery<QAList>("dbo.GetDateTime @datetime", param).ToList();
现在我知道我没有使用相同类型的语法var paramPhone = validRequest.Phone;
var paramAccount = validRequest.AccountNumber;
var paramLead = validRequest.LeadId;
var result = _db.ValidRequests.SqlQuery(
"dbo.CheckForValidRequest @Phone, @AccountNumber, @LeadId", paramPhone, paramAccount, paramLead);
,但这是基于我在别处读到的内容。
我确实设置了dbcontext.Database
,所以看起来像这样
DbSet
但是,我没有像使用linq到SQL查询那样使用modelBuilder在 public DbSet<ValidRequest> ValidRequests { get; set; }
中做任何事情。
我的错误讯息:
在模型生成期间检测到一个或多个验证错误:
MyProject.ValidRequest:EntityType'ActiveRequest'没有定义键。定义此EntityType的键 ValidRequests:EntityType:EntitySet'ValidRequests'基于没有定义键的'ValidRequest'类型
通常我会定义一个键,但这是我正在调用的存储过程...
更新:尝试不同的方式,但是......它正在进入onModelCreating
我正在尝试这种方法
OnModelCreating
当我根据传入的数据得到0时返回-1:/
更新2 - 我添加了一个OUPUT参数并且花了太多时间,我真的想弄清楚如何解决这个问题,但是现在我很遗憾地走向老学校:(
using(var _db = new ClearviewContext())
{
var p = new SqlParameter("@Phone", paramPhone);
var a = new SqlParameter("@AccountNumber", paramAccount);
var l = new SqlParameter("@LeadId", paramLead);
var r = _db.Database.ExecuteSqlCommand("exec CheckForValidRequest @Phone, @AccountNumber, @LeadId", p, a, l);
}
答案 0 :(得分:0)
在EF的早期版本中,Entity模型类派生自Objectcontext 但现在它派生自DbContext类,它是ObjectContext类的包装类。
要调用存储过程,我们需要ObjectContext的实体实例
var context = (_entity as IobjectContextAdapter).ObjectContext;//ObjectContext have ExecuteStoreQuery<T> as overloaded method and T denote the return type
1。 不带参数的存储过程:
一个。 GetStatus - 存储过程的名称
湾空对象集合作为参数。
var lst = context.ExecuteStoreQuery<tblStatu>("GetStatus", new string[] { });
2。 带参数的存储过程
一个。 GetMyName - 存储过程的名称
湾@FirstName,@ LastName =参数。
C。参数 - 将对象集合为参数。
var parameter = new object[] {
new SqlParameter("@FirstName", "Vikas"),
new SqlParameter("@LastName", "Mahajan")
};
Int32 recordID = context.ExecuteStoreQuery<Int32>("GetMyName", @FirstName,@LastName, parameter).FirstOrDefault();
3。 具有复杂返回类型的存储过程:
对于复杂返回类型,我们需要使用存储过程的返回数据集中的属性声明一个自定义类
一个。 SvcRequestStatus(T) - 自定义类
湾GetStatusDynamixQuery - 存储过程的名称。
C。作为参数的对象的空集合。
IEnumerable<SvcRequestStatus> lst1 = context.ExecuteStoreQuery<SvcRequestStatus>("GetStatusDynamixQuery", new string[] { });
希望这会有所帮助!!