Asp.net mvc 在视图中显示来自两个不同模型的数据
我是从书中学习ASP.NETMVC的新手。我正在使用NInject实现IoC。我已经为工作和地点创建了一个数据模型,如下所示Asp.net mvc 在视图中显示来自两个不同模型的数据,asp.net-mvc,ninject.web.mvc,Asp.net Mvc,Ninject.web.mvc,我是从书中学习ASP.NETMVC的新手。我正在使用NInject实现IoC。我已经为工作和地点创建了一个数据模型,如下所示 public interface IJobDetails { IEnumerable<JobDetails> jobDetailsInterface { get; } } public interface ILocation { IEnumerable<Location> locationInterface { get; }
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; }
}
}
表名-作业详细信息
JobId<PK>
LocationId<FK>
JobName
public class JobDetails
{
[Key]
public int JOBID { get; set; }
public int LocationID { get; set; }
public string JOBNAME { get; set; }
}
位置
LocationId<PK>
LocationName
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; }
}
}
如何在“我的作业”视图中显示位置名称而不是位置id
注意:我正在从亚当·弗里曼的书中学习MVC,并试图创造一些新的东西。请让我知道我所做的是正确的还是错误的。补充了Sleeyun的回答。您可能需要将“导航”属性添加到
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
在您的场景中,我相信实体框架将能够从模型结构推断出关系,因此您不需要设置实体配置
请注意,这种方法会导致
希望这有帮助:)您是否使用EntityFramework?如果是这样,您应该能够通过作业存储库访问LocationName,如
repository.jobDetailsInterface.Location.LocationName
。我使用的是实体框架,但我无法通过jobDetailsInterface访问LocationName解决方案对我有效。我不明白我将如何面对N+1问题,因为我在作业和位置模型之间有1-1关系。你能详细说明一下吗?我相信这会导致N+1,因为在调用repository.jobdailsinterface代码>实体框架将不会加载JobLocation
属性<当我们尝试从视图访问LocationName
属性时(称为延迟加载),code>JobLocation
作为一个单独的sql查询加载。修复方法是使用repository.jobDetailsInterface.Include(j=>j.JobLocation)
,这将确保实体框架急切地加载导航属性,更多关于这一点的说明感谢@Varinder的解释
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; }
}