我在我的应用程序中实现了一个服务层,如: http://www.asp.net/learn/mvc/tutorial-38-cs.aspx
(我使用Linq2SQL)。现在我在实现Edit ActionResult方面遇到了麻烦。在Create(Post)ActionResult中,我采用了服务方法:
if (_service.CreateMovie(movie))
{
return RedirectToAction("Details", new { id = movie.ID });
}
else
{
return View(movie);
}
好吧,好吧。现在我在编辑ActionResult中的问题是:我如何实现实体的更新?
在Repository中,我有以下Update方法:
public bool UpdateMovie(Film movieToUpdate)
{
try
{
_db.SubmitChanges();
return true;
}
catch
{
return false;
}
}
然后,服务调用存储库。但是,表格中所做的更改并未“模拟”到模型中,因此实体未按新值更新。
我可以在Controller中调用“UpdateModel”,但是我还必须调用服务中的Validate。但是,验证逻辑不再在服务中而不是在Controller中。
我希望你理解我的问题。
答案 0 :(得分:0)
您需要首先检索新插入的电影,以便L2S知道它。然后将movieToUpdate发生的任何更改应用于此新近检索的电影对象,这将保留更改。请记住,您希望将SaveChanges应用于与获取电影相同的上下文,否则L2S将不知道如何处理它。
答案 1 :(得分:0)
我没有找到任何更新模型的方法,没有基本类型验证。所以我已经实现了UpdateModel和一个自定义的DefaultBinderMessage。目前,这足以满足我的要求。 在其他地方,我可以实现Error-Interface来对服务层进行所有验证。