我正在尝试使用Entity Framework中的存储过程映射功能来执行insert update和delete函数。
无论出于何种原因,程序都没有被调用。它们被正确地映射了,我所要做的就是调用
SaveChanges();
在我的控制器中执行。
this tutorial
作为参考,我将如何更改控制器的编辑部分,使其利用存储过程?
//
// GET: /Home/Edit/5
public ActionResult Edit(int id)
{
var contactToEdit = (from c in _entities.ContactSet
where c.Id == id
select c).FirstOrDefault();
return View(contactToEdit);
}
//
// POST: /Home/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Contact contactToEdit)
{
if (!ModelState.IsValid)
return View();
try
{
var originalContact = (from c in _entities.ContactSet
where c.Id == contactToEdit.Id
select c).FirstOrDefault();
_entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
保存更改();
更新存储过程将更新,因此我刚刚删除了对的调用
ApplyPropertyChanges();
//
// POST: /Home/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Contact contactToEdit)
{
if (!ModelState.IsValid)
return View();
try
{
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
但是更新存储过程没有执行,我已经运行了sql事件探查器来确保。
这个
编程实体框架
引用书籍教程的话说:
所以,我想我遗漏了一些很明显的东西。
编辑,这是我现在使用的确切版本,名称不同:
//
// GET: /Candidate/Edit/5
public ActionResult Edit(int id)
{
var candidateToEdit = (from c in Internship.CompleteCandidate
where c.UserID == id
select c).FirstOrDefault();
//ViewData["EducationID"] = new SelectList(Internship.education.ToList(), "ID", "Category", candidateToEdit.EducationID);
return View(candidateToEdit);
}
//
// POST: /Candidate/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(CompleteCandidate candidateToEdit)
{
if (!ModelState.IsValid)
return View();
try
{
var originalCandidate = (from c in Internship.CompleteCandidate
where c.UserID == candidateToEdit.UserID
select c).FirstOrDefault();
Internship.ApplyPropertyChanges(originalCandidate.EntityKey.EntitySetName, candidateToEdit);
Internship.SaveChanges();
return RedirectToAction("Index");
}
catch(Exception e)
{
Response.Write("Error: " + e);
//return View();
return null;
}
}
}
}
它在结构上与教程代码几乎相同,但在运行时抛出NullReference异常。