我是一名从书中学习ASP.NET MVC的新手。我正在使用NInject来实现IoC。我为Job和Location创建了一个数据模型,如下所示
表名 - JobDetails
JobId<PK>
LocationId<FK>
JobName
表名称 - 位置
LocationId<PK>
LocationName
我创建了位置和JobDetails的实体,如下所示
JobDetails
public class JobDetails
{
[Key]
public int JOBID { get; set; }
public int LocationID { get; set; }
public string JOBNAME { get; set; }
}
位置
public class Location
{
[Key]
public int LocationID{ get; set; }
public string LocationName { 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。 我的JobDetail控制器如下所示
public class JobController : Controller
{
public IJobDetails repository;
public JobController(IJobDetails job)
{
repository = job;
}
public ViewResult List()
{
return View(repository.jobDetailsInterface);
}
}
如何在作业视图中显示位置名称而不是位置ID?
N.B-我正在从Adam Freeman的书中学习MVC并试图创造新的东西。请让我知道我所做的是否正确。
答案 0 :(得分:0)
添加了sleeyuen的回复。您可能需要向JobDetails
模型添加“导航”属性,如下所示:
public class JobDetails
{
[Key]
public int JOBID { get; set; }
public int LocationID { get; set; }
public string JOBNAME { get; set; }
public virtual Location JobLocation { get; set; }
}
然后,您应该可以通过执行以下操作访问位置名称:repository.jobDetailsInterface.JobLocation.LocationName
在您的场景中,我相信实体框架将能够从模型结构中推断出关系,因此您不需要设置实体配置
请注意,此方法会导致N+1
希望这会有所帮助:)