gpt4 book ai didi

c# - mvc模式中模型和 Controller 的分离

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:24 26 4
gpt4 key购买 nike

在 mvc 模式中声明用于访问或操作数据的 Entity Framework 命令或数据集(ado.net)应该在模型中,因为我知道,当我想在数据库中获取我的对象列表时,所有方法都应该在模型和返回列表中, Controller 应该得到它并将其传递给 View ,

但正如我在许多代码中看到的那样,在 Controller 中使用了 decalaring 方法,比如 ^

 //I get logged in user properties
var user = db.UserProperties.SingleOrDefault(x => x.UserName == User.Identity.Name);
Buddyship allBudees = db1.Buddyships.SingleOrDefault(u =>u.BuddiedByUserId == user.UserId);
var buds = from u in db.UserProperties
join m in db1.Buddyships on u.UserId equals m.BuddiedByUserId
where m.BuddiedByUserId == user.UserId
select new { u.FirstName, u.LastName, u.SchoolName, u.UserId };

var buddyviewmodel = new BuddyViewModel(buds //don't know what to put here);

return View(buddyviewmodel);

这部分代码应该在模型或 Controller 中?

最佳答案

理想情况下,此代码属于业务层。我通常在我的数据层(使用 EF)和 Controller 之间创建一个服务层。服务(例如 UserService)将域模型返回给 Controller 。然后 Controller 将其映射到 ViewModel 并返回 View 。通过这种方式,您可以将数据访问从 Controller 中抽象出来,这样您就不会到处都有(相同的)LINQ 查询。

在您的情况下, Controller 将如下所示:

Buddyship buddies = _buddyService.GetBuddiesByUserId(user.UserId);
BuddyViewModel buddyViewModel = new BuddyViewModel(buddies);
return View(buddyViewModel);

对于非常小的项目,此代码在 Controller 中很好,但在您的域模型类中绝对不行。

关于c# - mvc模式中模型和 Controller 的分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com