如何将模型和存储库组成一类属性?

时间:2014-02-12 18:39:58

标签: c# asp.net-mvc model repository

我目前正在开发一个带有存储库的新mvc网站。我总是和oldschool sql合作,现在是时候继续前进了。

所以我目前拥有的是一个包含我的数据库和属性的存储库,但我也有一个具有几乎相同属性的模型,可以在插入新值之前验证所有字段。现在我有两个具有几乎相同属性的类。有没有办法在我的存储库中验证我的属性?

所以我在这个例子中正在做的是用我的存储库的信息填充我的模型,以便我可以在以后验证它。但我只想返回存储库,我不确定这是否可行,但我很确定它是。

示例:

    public ActionResult Wijzig(int id)
    {
        // Generate view model
        var bundleModel = new Models.BundleGebruikersPasswordModel
        {
            WijzigGebruikersModel = new Models.WijzigGebruikersModel(),
            PasswordModel = new Models.PasswordModel()
        };

        // Get user repository
        var userRepository = new UsersRepository();

        // Get specific user
        var userInformation = userRepository.GetById(id);

        // Fill model fields
        bundleModel.WijzigGebruikersModel.GebruikersId = id;
        bundleModel.WijzigGebruikersModel.Voornaam = userInformation.Voornaam;
        bundleModel.WijzigGebruikersModel.Achternaam = userInformation.Achternaam;
        bundleModel.WijzigGebruikersModel.AdresToevoeging = userInformation.AdresToevoeging;
        bundleModel.WijzigGebruikersModel.BeveilingsAntwoord = userInformation.BeveilingsAntwoord;
        bundleModel.WijzigGebruikersModel.BeveilingsVraagId = userInformation.BeveilingsVraag;
        bundleModel.WijzigGebruikersModel.Email = userInformation.Email;
        bundleModel.WijzigGebruikersModel.Huisnummer = userInformation.Huisnummer;
        bundleModel.WijzigGebruikersModel.LandId = userInformation.Land;
        bundleModel.WijzigGebruikersModel.Woonplaats = userInformation.Woonplaats;
        bundleModel.WijzigGebruikersModel.Straat = userInformation.Straat;
        bundleModel.WijzigGebruikersModel.Postcode = userInformation.Postcode;
        bundleModel.WijzigGebruikersModel.LandenList = userRepository.GetLanden(userInformation.Land);
        bundleModel.WijzigGebruikersModel.BeveilingsVragenList = userRepository.GetBeveilingsVragen(userInformation.BeveilingsVraag);
        bundleModel.WijzigGebruikersModel.GroepenList = userRepository.GetGroepen(userInformation.GroepID);
        bundleModel.PasswordModel.GebruikersId = id;

        // Return model
        return View(bundleModel);
    }

提前感谢帮助我,永远感激不尽!

1 个答案:

答案 0 :(得分:1)

  

但我只想返回存储库

在视图上返回userRepository而不是bundleModel可能会强制您在视图上编写逻辑(例如userRepository.GetById((int)ViewContext.RouteData.Values["id"])我建议你不要使用这种方法,因为它违反了MVC模式的主要意图 - 关注点分离。

  

所以我在这个例子中正在做的是用我的存储库的信息填充我的模型,以便我可以在以后验证它。但我只想返回存储库,我不确定这是否可能,但我很确定它。

  1. 如果您想简化bundleModel 的创建,可以使用Automapper

    var bundleModel = new Models.BundleGebruikersPasswordModel
    {
        WijzigGebruikersModel = new Models.WijzigGebruikersModel() { GebruikersId = id },
        PasswordModel = Mapper.Map<User, Models.WijzigGebruikersModel>(userRepository.GetById(id))
    };
    

    甚至

    var bundleModel = Mapper.Map<User, Models.BundleGebruikersPasswordModel>(userRepository.GetById(id));
    

    但您应该阅读有关配置Automapper的更多信息。

  2. 如果您想避免使用视图模型 Models.WijzigGebruikersModelModels.PasswordModel,您可以使用User实体。 但我不建议使用此解决方案,因为在这种情况下,您的View了解您的域模型。

    // Return model
    return View(userRepository.GetById(id));
    
  3. 有几个与Asp.Net MVC最佳实践相关的好链接

    1. 12 ASP.NET MVC Best Practices
    2. Best Practices for ASP.NET MVC
    3. Best MVC Practices