Использование Visual Studio Express 2012, веб-приложения MVC4 и SQL 2008 R2 ...
Раньше у меня была хранимая процедура, которая принимала только один параметр, и когда моя модель MVC включала эту хранимую процедуру, я мог успешно вызвать ее из моего Controller
и получить Json
результаты.
Теперь я обновил хранимую процедуру, чтобы она могла принимать два параметра. Я обновил свою модель MVC, но не могу правильно вызвать хранимую процедуру из моего контроллера при передаче двух параметров.
Вот моя старая хранимая процедура и контроллер, использующие один параметр (это работает):
PROCEDURE [dbo].[GetDependencyNodes]
@CISearchString nvarchar(100)
Старый контроллер:
namespace CMDB.Controllers
{
public class GoJSDiagramNodesAndLinksController : Controller
{
private CMDBEntities db = new CMDBEntities();
public ActionResult GetDependencyNodes(string CISearchString)
{
return Json(db.GetDependencyNodes(CISearchString).ToList(), JsonRequestBehavior.AllowGet);
}
}
}
Вот моя новая хранимая процедура и контроллер, принимающие два параметра:
PROCEDURE [dbo].[GetDependencyNodes]
@CISearchString nvarchar(100),
@ExcludeString nvarchar(100)
Новый контроллер:
namespace CMDB.Controllers
{
public class GoJSDiagramNodesAndLinksController : Controller
{
private CMDBEntities db = new CMDBEntities();
public ActionResult GetDependencyNodes(string CISearchString, string ExcludeString)
{
return Json(db.GetDependencyNodes(CISearchString, ExcludeString).ToList(), JsonRequestBehavior.AllowGet);
}
}
}
В Visual Studio Express 2012 я получаю сообщение об ошибке в строке «return Json»:
'int' не содержит определения для 'ToList', и не удалось найти метод расширения 'ToList', принимающий первый аргумент типа 'int'.
Если я изменю строку с:
return Json(db.GetDependencyNodes(CISearchString, ExcludeString).ToList(), JsonRequestBehavior.AllowGet);
to:
return Json(db.GetDependencyNodes(CISearchString, ExcludeString).ToString().ToList(), JsonRequestBehavior.AllowGet);
Ошибка исчезает, но контроллер возвращает -1 вместо правильных результатов Json. Я протестировал хранимую процедуру в SQL Manager и вижу ожидаемые результаты.
Вот частичный код из моего файла CMDBModels.Desginer.cs с GetDependencyNodes:
/// <summary>
/// No Metadata Documentation available.
/// </summary>
/// <param name="cISearchString">No Metadata Documentation available.</param>
/// <param name="excludeString">No Metadata Documentation available.</param>
public int GetDependencyNodes(global::System.String cISearchString, global::System.String excludeString)
{
ObjectParameter cISearchStringParameter;
if (cISearchString != null)
{
cISearchStringParameter = new ObjectParameter("CISearchString", cISearchString);
}
else
{
cISearchStringParameter = new ObjectParameter("CISearchString", typeof(global::System.String));
}
ObjectParameter excludeStringParameter;
if (excludeString != null)
{
excludeStringParameter = new ObjectParameter("ExcludeString", excludeString);
}
else
{
excludeStringParameter = new ObjectParameter("ExcludeString", typeof(global::System.String));
}
return base.ExecuteFunction("GetDependencyNodes", cISearchStringParameter, excludeStringParameter);
}
Любые идеи?
Спасибо.