我的Linq查询应该存储在哪里.NET MVC

时间:2014-11-16 21:34:37

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

我需要一些建议。我是.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());
    }

我是否以正确的方式考虑这一点,因为查询可能会变得更加复杂?

1 个答案:

答案 0 :(得分:2)

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

定义存储库接口:

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

然后创建此存储库的实现,使用LINQ来完成获取Veihcles的实际工作:

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());
}