Asp.net 如何访问实体框架外键对象

Asp.net 如何访问实体框架外键对象,asp.net,entity-framework,razor,Asp.net,Entity Framework,Razor,我正在使用Entity Framework创建一个ASP.NET项目,很难理解如何在Entity Framework中访问外键对象 我有一个这样的模型: [Key] [Display(Name = "Setup ID")] public int SetupId { get; set; } [ForeignKey("SetupDetails")] [Display(Name = "Setup Details")] public int SetupD

我正在使用Entity Framework创建一个ASP.NET项目,很难理解如何在Entity Framework中访问外键对象

我有一个这样的模型:

    [Key]
    [Display(Name = "Setup ID")]
    public int SetupId { get; set; }

    [ForeignKey("SetupDetails")]
    [Display(Name = "Setup Details")]
    public int SetupDetailsId { get; set; }
setup.setupdetails.Name
值得注意的是,
SetupDetails
在它自己的表中,我们在一个名为
Setup
的表中。因此,当我创建一个对象时,我希望能够访问如下内容:

    [Key]
    [Display(Name = "Setup ID")]
    public int SetupId { get; set; }

    [ForeignKey("SetupDetails")]
    [Display(Name = "Setup Details")]
    public int SetupDetailsId { get; set; }
setup.setupdetails.Name
因此,根据我的理解,我需要在对象“设置”中创建和设置对象,如下所示:

然而,当我这样做时,我们得到了一个空指针异常,很明显,如果它是外键,我们知道它存在

我是否只需要将int转换为
SetupDetails
类?如果更改此数据类型,则会出现错误:

无法确定“SetupDetails”类型的导航属性“Setup.SetupDetailsId”表示的关系


你在这里想要达到的目标需要我们称之为“导航属性”

当您尝试获取这些数据时,例如:

public void SomeMethod(int setupId)
{
    //_context is your DbContext.
    var setup = _context.Setup.Where(i => i.SetupId == setupId)
                              .Include(i=>i.SetupDetails)
                              .FirstOrDefault();

   //Now you can reach the "SetupDetails" value with => setup.SetupDetails.Name
   var setupDetailsName = setup.SetupDetails.Name;
}

你在这里想要达到的目标需要我们称之为“导航属性”

当您尝试获取这些数据时,例如:

public void SomeMethod(int setupId)
{
    //_context is your DbContext.
    var setup = _context.Setup.Where(i => i.SetupId == setupId)
                              .Include(i=>i.SetupDetails)
                              .FirstOrDefault();

   //Now you can reach the "SetupDetails" value with => setup.SetupDetails.Name
   var setupDetailsName = setup.SetupDetails.Name;
}

在Setups模型中创建虚拟类型,
public virtual SetupDetails SetupDetails{get;set;}
访问SetupDetails时,
SetupDetails.SetupDetails?.Name
像这样使用在Setups模型中创建虚拟类型,
public virtual SetupDetails SetupDetails SetupDetails{get;set;}
访问SetupDetails时,
setup.setupdetails?.Name
这样使用如果该setupId的setupdetails数据为null,则引发异常。如果该setupId的setupdetails数据为null,则引发异常。