使用服务层验证,如何更新实体

时间:2009-09-03 06:55:25

标签: c# asp.net service edit updatemodel

我在我的应用程序中实现了一个服务层,如: 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中。

我希望你理解我的问题。

2 个答案:

答案 0 :(得分:0)

您需要首先检索新插入的电影,以便L2S知道它。然后将movieToUpdate发生的任何更改应用于此新近检索的电影对象,这将保留更改。请记住,您希望将SaveChanges应用于与获取电影相同的上下文,否则L2S将不知道如何处理它。

答案 1 :(得分:0)

我没有找到任何更新模型的方法,没有基本类型验证。所以我已经实现了UpdateModel和一个自定义的DefaultBinderMessage。目前,这足以满足我的要求。 在其他地方,我可以实现Error-Interface来对服务层进行所有验证。