Entity framework 使用MVC4中存储过程返回的int结果
我创建了如下存储过程:Entity framework 使用MVC4中存储过程返回的int结果,entity-framework,asp.net-mvc-4,Entity Framework,Asp.net Mvc 4,我创建了如下存储过程: ALTER procedure [dbo].[takeOrder] ( @id int = 0, @userid int = 0, @diningid int, @amount float ) as begin declare @countt as int select @countt = COUNT(*) from Order_master where dining_Id = @diningid an
ALTER procedure [dbo].[takeOrder]
(
@id int = 0,
@userid int = 0,
@diningid int,
@amount float
)
as
begin
declare @countt as int
select @countt = COUNT(*)
from Order_master
where dining_Id = @diningid and isActive = 1
if @countt <> 0
begin
update Order_master
set amount = @amount
where dining_Id = @diningid and isActive = 1;
end
else
begin
insert into Order_master(userid, dining_Id, amount, [date], isActive)
values (@userid, @diningid, @amount, GETDATE(), 1)
end
--select amount from Order_master where dining_Id=@diningid and isActive=1
select oid
from Order_master
where dining_Id = @diningid and isActive = 1
end
在控制器中,我试图获得如下所述的返回结果:
[HttpPost]
public ActionResult takeOrder(Order_master order,List<Menu_info> menu)
{
String msg = "";
int oid;
if (ModelState.IsValid)
{
try
{
Order_master objOreder = new Order_master
{
amount = order.amount,
isActive = 1,
date = order.date,
dining_Id = order.dining_Id,
userId = order.userId
};
object orderId = db.takeOrder(objOreder.oid, objOreder.userId, objOreder.dining_Id, objOreder.amount);
oid = (int)orderId;
msg = "success..!!";
}
catch (Exception ex)
{
msg = "error...";
}
}
else
{
msg = "please provide info";
}
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = msg, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
else
{
return View();
}
}
但它返回一个异常
无法将类型“System.Data.Objects.ObjectResult”转换为“int”
我无法从存储过程中获取单个返回值
希望我得到正确的解决方案
object orderId = db.takeOrder(objOreder.oid, objOreder.userId, objOreder.dining_Id, objOreder.amount);
oid = (int)orderId;
尝试这种转换方法
oid = Convert.ToInt32(orderId);
你可以用like
public int InsertWebProperty(int orgid, int? userid, string address, string property_Id, string latitude, string longitude, int? compamyid)
{
return Convert.ToInt32((db.InsertWebProperty(orgid, userid, address, property_Id, latitude, longitude, 0)).FirstOrDefault().recidentity.Value);
}
如果对你不起作用,请告诉我。。
谢谢db.TakeOrder.FirstOrDefault.ToString=作为字符串返回的一个值
db.TakeOrder.FirstOrDefault.ToList=作为列表返回的行
创建视图为
创建视图[dbo]。[vScalar]
像
选择作为值
存储过程内返回
选择CASTorderId作为VARCHAR10作为值
在实体框架中,设置函数return use Entity vScalar
编码
vScalar orderId=db.takeorderrobjoreder.oid、objOreder.userId、objOreder.dinning\u Id、objOreder.amount.FirstOrDefault
oid=intorderId.value
它给出的异常为:{System.InvalidCastException:无法强制转换类型为'System.Data.Objects.ObjectResult1[System.Nullable1[System.Int32]]的对象'键入'System.IConvertible'。在System.Convert.ToInt32对象值处尝试使用:oid=orderId.FirstOrDefault;。ObjectResult可以有多个值-您需要请求第一个int才能返回结果