Asp.net mvc 在视图中显示来自两个不同模型的数据

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

我是从书中学习ASP.NETMVC的新手。我正在使用NInject实现IoC。我已经为工作和地点创建了一个数据模型,如下所示

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