我目前正在开发一个带有存储库的新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);
}
提前感谢帮助我,永远感激不尽!
答案 0 :(得分:1)
但我只想返回存储库
在视图上返回userRepository
而不是bundleModel
可能会强制您在视图上编写逻辑(例如userRepository.GetById((int)ViewContext.RouteData.Values["id"])
)
我建议你不要使用这种方法,因为它违反了MVC模式的主要意图 - 关注点分离。
所以我在这个例子中正在做的是用我的存储库的信息填充我的模型,以便我可以在以后验证它。但我只想返回存储库,我不确定这是否可能,但我很确定它。
如果您想简化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的更多信息。
如果您想避免使用视图模型 Models.WijzigGebruikersModel
和Models.PasswordModel
,您可以使用User
实体。 但我不建议使用此解决方案,因为在这种情况下,您的View了解您的域模型。
// Return model
return View(userRepository.GetById(id));
有几个与Asp.Net MVC最佳实践相关的好链接