【发布时间】:2021-02-28 19:08:21
【问题描述】:
我是 ASP.NET MVC 的新手,在调用插入记录的存储过程时收到此错误消息:
数据读取器与指定的“SITHModel.Request”不兼容。类型的成员“ID”在数据读取器中没有同名的对应列。
在 return 语句中抛出异常。
public virtual ObjectResult<Request> AddRequest(Nullable<int> routeID, string email, string description, string aDDEDBYID)
{
var routeIDParameter = routeID.HasValue ?
new ObjectParameter("RouteID", routeID) :
new ObjectParameter("RouteID", typeof(int));
var emailParameter = email != null ?
new ObjectParameter("Email", email) :
new ObjectParameter("Email", typeof(string));
var descriptionParameter = description != null ?
new ObjectParameter("Description", description) :
new ObjectParameter("Description", typeof(string));
var aDDEDBYIDParameter = aDDEDBYID != null ?
new ObjectParameter("ADDEDBYID", aDDEDBYID) :
new ObjectParameter("ADDEDBYID", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Request>("AddRequest", routeIDParameter, emailParameter, descriptionParameter, aDDEDBYIDParameter);
}
AddRequest 在下面。
ALTER PROCEDURE [dbo].[AddRequest]
(@RouteID int,
@Email nvarchar(100),
@Description nvarchar(4000),
@AddedByIDnvarchar(128))
AS
BEGIN
INSERT INTO Request (RouteID, Email, Description, AddedByID, ChangedByID)
VALUES (@RouteID, @Email, @Description, @AddedByID, @AddedByID)
END
我不希望存储过程返回任何内容,并且我对其他类似模型和存储过程没有问题。
控制器
// POST: Requests/Create
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details see https://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,RouteID,Email,Description,AddedByID,ChangedByID,DateAdded,DateChanged")] Request request)
{
if (ModelState.IsValid)
{
var userID = "00000000-0000-0000-0000-000000000001";
if (User.Identity.IsAuthenticated)
{
userID = User.Identity.GetUserId();
}
db.AddRequest(request.RouteID, request.Email, request.Description, userID);
return RedirectToAction("ThankYou");
}
ViewBag.AddedByID = new SelectList(db.AspNetUsers, "Id", "Email", request.AddedByID);
ViewBag.ChangedByID = new SelectList(db.AspNetUsers, "Id", "Email", request.ChangedByID);
ViewBag.RouteID = new SelectList(db.Routes, "ID", "Name", request.RouteID);
return View(request);
}
知道我可以更新或删除什么来使其正常工作吗?
【问题讨论】:
-
new ObjectParameter("RouteID", typeof(int)) 会将类型 Int32 添加为参数值,对吗?也许你想要 new ObjectParameter("RouteID", default(int)) ?
-
您正在执行 ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction
,这意味着您希望函数返回一些与某些请求类型匹配的行。但是正如您自己所说的那样-您的程序不会返回任何内容,因此会出现错误。只需使用不带泛型参数的 ExecuteFunction,并且不要从该方法返回任何内容 -
我删除了返回类型,这是有道理的,但是我仍然得到同样的异常。有什么想法吗?
-
您需要stackoverflow.com/questions/24126767/… 之类的东西吗?
-
这个也不行。
标签: c# sql-server asp.net-mvc tsql