猿问

TryUpdateModel的真实示例,ASP .NET MVC 3

我不明白如何使用TryUpdateModel并同时保存MVC架构。


如果我没有记错的话,则必须在模型中使用数据上下文。所以,这样的代码


var db=new TestEverybody();//it is class, which was generated by EntityFramework 

var currentTesting=db.Testing.(t => t.id == id).First();

必须位于模型中,而不位于控制器中,不是吗?


但是下面是TryUpdateModel用法的常见示例:


    public ActionResult Edit(Testing obj)//Testing collection

    {

        var db = new TestEverybody();

        var currentTesting=db.Testing.(t => t.id == obj.id).First();

        TryUpdateModel(currentTesting);

        db.SaveChanges();            

        return RedirectToAction("Index");

    }

这样不会破坏MVC架构吗?我们在控制器而不是特殊的Model类中使用数据库。


那么,在实际项目中使用TryUpdateModel的最佳方法是什么?


江户川乱折腾
浏览 660回答 3
3回答

慕斯709654

因此,这样的代码必须位于模型中,而不是在控制器中,不是吗?不必要。我个人更喜欢将数据访问代码放在存储库中。然后使用构造函数注入将一些特定的存储库实现传递给控制器(例如,如果我使用的是EF,我将编写EF存储库实现)。因此,控制器将如下所示:public class HomeController: Controller{    private readonly IMyRepository _repository;    public HomeController(IMyRepository repository)    {        _repository = repository;    }    public ActionResult Edit(int id)    {        var currentTesting = _repository.GetTesting(id);        TryUpdateModel(currentTesting);        _repository.SaveChanges();                    return RedirectToAction("Index");    }}

qq_遁去的一_1

由于MVC为您实例化了控制器,因此显示(或解释)如何实际注入存储库可能会很有用。通常,这仅用于通过Mocks进行测试,因此您的控制器可以ActulRepository在其默认构造函数中创建的实例。但是,新手开发人员可能会对此一视同仁,并且对如何在_repository不本地实例化实际Repo的情况下产生困惑。
随时随地看视频慕课网APP
我要回答