Я пытаюсь использовать функцию отображения хранимых процедур в Entity Framework для выполнения функций вставки обновления и удаления.
По какой-то причине процедуры не вызываются. Они правильно сопоставлены, и, возможно, все, что мне нужно сделать, это вызвать SaveChanges();
в моем контроллере, чтобы они выполнились.
Используя этот учебник в качестве ссылки, что бы я изменил в части контроллера Edit, чтобы он использовал хранимую процедуру?
Код учебника:
//
// 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();
}
}
}
Я думал, что, просто позвонив SaveChanges();
, обновится sproc, поэтому я просто удалил вызов на 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 profiler, чтобы убедиться.
Книжные учебники Programming Entity Framework цитируются так:
Теперь, когда хранимые процедуры сопоставлены, нет необходимости вызывать их непосредственно в коде. Каждый раз, когда вызывается SaveChanges, Entity Framework будет использовать ваши хранимые процедуры для любых необходимых вставок, обновлений и удалений.
Итак, я полагаю, что мне здесь не хватает чего-то достаточно очевидного.
Правка, вот точная версия, с которой я сейчас работаю, названия разные:
//
// 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 во время выполнения.