【问题标题】:Where Should my Linq Queries be stored .NET MVC我的 Linq 查询应该存储在哪里 .NET MVC
【发布时间】:2015-01-13 18:02:23
【问题描述】:

我需要一些建议。我是 .NET MVC 的新手,我想知道我应该在哪里存储 linq 查询?在下面的实例中,我将它们放在我的控制器中,就像这样

public ActionResult Index()
    {
        var vehicles = from v in db.Vehicles
                       from m in db.Makes
                       from mods in db.Models
                       where v.Model.ModelID == mods.ModelID
                       where mods.Make.MakeID == m.MakeID
                       select v;

        return View(vehicles.ToList());
    }

考虑到查询可能会变得更加复杂,我是否以正确的方式处理这个问题?

【问题讨论】:

  • 这真的是你的电话。关于这个话题有很多讨论(即stackoverflow.com/questions/4565681/…符合我的意见,但stackoverflow.com/questions/18563229/…建议相反。在搜索其他答案时,请务必了解“ASP.Net MVC”不使用“MVC模式”,而是“ MVVM 模式”。
  • 谢谢阿列克谢,这很有帮助。关于设计模式,我还有很多东西要学。你对我可以从哪里开始有什么建议吗?

标签: c# asp.net-mvc linq ef-code-first


【解决方案1】:

在您的情况下,我会做的是使用存储库模式,这样可以避免控制器中 LINQ 的依赖性。我在下面给你一个大纲。

定义一个仓库接口:

public interface IRepository
{
   public IEnumerable<Vehicle> FetchAllVehicles();
}

然后创建此存储库的实现,使用 LINQ 执行获取车辆的实际工作:

public class Repository : IRepository
{
   public IEnumerable<Vehicle> FetchAllVehicles()
   {
      var vehicles = from v in db.Vehicles
                       from m in db.Makes
                       from mods in db.Models
                       where v.Model.ModelID == mods.ModelID
                       where mods.Make.MakeID == m.MakeID
                       select v;

        return vehicles.ToList();
   }
}

然后使用控制器中的存储库:

private IRepository _repo = new Repository();

public ActionResult Index()
{
   return View(_repo.FetchAllVehicles());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2019-04-25
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多