如何使用外键访问其他表的列?

本文关键字:其他 访问 何使用 | 更新日期: 2023-09-27 18:01:20

我有两个表ProductionLineMachine。在Machine表中,我有一个ProductionLine的外键命名为productionLine

我想从Machine表访问ProductionLine中的KeyId列。my Machine Class:

[Column("FldKeyId")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Required]
    [Key]
    public int MyKeyId { get; set; }
    [Column("FldCode")]
    [Required]
    [Index(IsUnique = true)]
    public int MyMachineCode
    {
        get { return _MachineCode; }
        set { _MachineCode = value; }
    }
    [Column("FldName")]
    [Required]
    public string MyName
    {
        get { return _Name; }
        set { _Name = value; }
    }
    [Column("FldDescription")]
    [Required]
    public string MyDescription
    {
        get { return _Desc; }
        set { _Desc = value; }
    }
    [Column("FldModifiedUserId")]
    [Required]
    public int ModifiedUserId { get; set; }
    [Column("FldModificationDate")]
    [Required]
    public DateTime ModificationDate { get; set; }
    [Column("FldDeleteFlag")]
    [Required]
    public int DeleteFlag { get; set; }
    [Required]
    public ProductionLine ProductionLine { get; set; }

就是DbContext类:

public DbSet<Machine> Machines { get; set; }

我有这段代码,但是它抛出了一个错误:

Machine _SelectedMachine;
_SelectedMachine = (cmbMachines.SelectedItem as Machine);
int Mid = _SelectedMachine.ProductionLine.MyKeyId;
dgvcolCompany.DataSource = ProductionLine.GetMachineLine(Mid);

和方法getMachineLine:

public static List<ProductionLine> GetMachineLine(int KeyId)
{
   return new ContexManager().ProductionLines.Where(c => c.MyKeyId == KeyId && c.DeleteFlag == 0).ToList();
}

当运行这段代码时,在

int Mid=...

我得到这个错误

对象引用未设置为对象的实例。

我该怎么做?

我的表是由EF代码优先生成的-问题是如何访问ProductionLine的KeyId从机器的ProductionLine

如何使用外键访问其他表的列?

声明属性ProductionLine为virtual。还要在其上添加外键属性。

[ForeignKey]

public virtual ProductionLine ProductionLine;

p。如果有帮助,请标记为答案

必须在ProductionLine之上有一个[ForeignKey("ForeignKeyName")]属性让它成为虚拟的,让Lazy Loading成为可能。或者,如果你不想延迟加载,在获取机器时使用Include("ProductionLine")

OffTopic:你的名字不好。实体框架使用"基于约定的"的方法。因此,一个名为Machine的类的主键应该称为Id,而不是MyKeyId