【发布时间】:2015-07-07 12:35:48
【问题描述】:
我正在使用数据库优先方法开发一个 asp.net mvc 站点。
我有一个像这样的简单存储过程:
ALTER PROCEDURE [dbo].[ins_item]
-- Add the parameters for the stored procedure here
-- item supplied must be in the reference db
@item varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
select item
from reference.dbo.all_items
where item_name = @item
if @@ROWCOUNT !=1
begin
raiserror('supplied item is not found in the master item list.', 11,1)
return -1
end
--Now you know the item is in the reference, insert and handle any errors
END
当我在 SQL Server Management Studio 中使用参考数据库中不存在的项目执行此操作时,我按预期收到此错误:
消息 50000,级别 11,状态 1,过程 ins_item,行 xx
在主项目列表中找不到提供的项目。
在我的 asp.net mvc 应用程序中,我将此存储过程导入到我的模型中,并且在我的一个控制器中,我有以下代码:
public ActionResult Create(item item)
{
if (ModelState.IsValid)
{
try
{
var insertresult = db.ins_item(item.item1);
db.SaveChanges();
}
catch (Exception e)
{
ViewBag.error = e;
}
return RedirectToAction("Index");
}
return View(item);
}
db.ins_item 在我模型的数据库上下文中看起来像这样,它继承自 DbContext 类:
public virtual ObjectResult<string> ins_item(string item)
{
var itemParameter = item!= null ?
new ObjectParameter("item", item) :
new ObjectParameter("item", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<string>("ins_item", itemParameter);
}
问题是执行此操作时我没有收到异常。如何捕捉存储过程在上述控制器操作中返回的 raiserror?
【问题讨论】:
-
您能否检查一下您的情况下的返回值(-1)并将其作为异常处理
标签: c# asp.net-mvc-4