为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

江户川乱折腾 2019-11-26 11:10:19
我不明白如何使用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的最佳方法是什么?
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

因此,这样的代码必须位于模型中,而不是在控制器中,不是吗?


不必要。我个人更喜欢将数据访问代码放在存储库中。然后使用构造函数注入将一些特定的存储库实现传递给控制器(例如,如果我使用的是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");

    }

}


查看完整回答
反对 回复 2019-11-26
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 659 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信