当我们有多个依赖项时,如何修复N + 1规则

时间:2017-04-22 09:35:42

标签: c# asp.net-mvc

我是一名从书中学习ASP.NET MVC的新手。我正在使用NInject来实现IoC。我为Job和Location创建了一个数据模型,如下所示

表名 - JobDetails

  JobId<PK>
  LocationId<FK>
  JobName
  CategoryId<FK>

表名称 - 位置

 LocationId<PK>
 LocationName

表名类别

 CategoryID<PK>
 CategoryName

我创建了位置和JobDetails的实体,如下所示

JobDetails

public class JobDetails
{
    [Key]
    public int JOBID { get; set; }

    public int LocationID { get; set; }

    public string JOBNAME { get; set; }

    public int CategoryID {get;set;}

    public virtual Location JobLocation{get;set;}

    public virtual Category JobCategory{get;set;}
}

位置

public class Location
{
    [Key]
    public int LocationID{ get; set; }

    public string LocationName { get; set; }
}

分类

public class Category
{
  public string categoryName {get;set;}
  public int CategoryId {get;set;}
}

我还有我的工作细节和位置的抽象和上下文类,如下所示

public interface IJobDetails
{
    IEnumerable<JobDetails> jobDetailsInterface { get; }
}


public interface ILocation
{

    IEnumerable<Location> locationInterface { get; }
} 

public class EFLocationRepository : ILocation
{
    public  EFDbContext context = new EFDbContext();

    public IEnumerable<Location> locationInterface
    {
        get { return context.Location; }
    }
}

public class EFJobRepository : IJobDetails
{
    public EFDbContext context = new EFDbContext();

    public IEnumerable<JobDetails> jobDetailsInterface
    {
        get { return context.JobDetails; }
    }
}

我的作业和位置模型类如下

public class JobListViewModel
{
    public IEnumerable<JobDetails> jobDetails { get; set; }
}

public class LocationListViewModel
{
    public IEnumerable<Location> Location { get; set; }
}

在我的JobDetail控制器中,我想显示位置名称而不是位置ID和类别名称而不是类别ID。我的JobDetail控制器如下所示

public class JobController : Controller
{
    public IJobDetails repository;

    public JobController(IJobDetails job)
    {
        repository = job;
    }

    public ViewResult List()
    {
        return View(repository.jobDetailsInterface);
    }

}

如果我在JobDetails视图中同时使用CategoryName,LocationName,则会导致N + 1问题。

我如何使用Include&lt;&gt;方法同时具有克服N + 1问题的模型。

0 个答案:

没有答案