我有两张表ProductionLine
和Machine
。在Machine
表格中,我有一个名为ProductionLine
的{{1}}的外键。
我想从productionLine
表格访问KeyId
中的列ProductionLine
。
我的机器类:
Machine
和那个DbContext类:
[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; }
我有这段代码,但是它引发了一个错误:
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();
}
我收到此错误
对象引用未设置为对象的实例。
我该怎么做?
我的表格是由EF代码优先生成的 -Problem是如何从Machine的生产线访问ProductionLine的KeyId
答案 0 :(得分:1)
将属性ProductionLine
声明为虚拟。还要在其上添加外键属性。
[ForeignKey]
public virtual ProductionLine ProductionLine;
如果有帮助,请将其标记为答案
答案 1 :(得分:0)
您必须拥有[ForeignKey("ForeignKeyName")]
以上ProductionLine
属性
并使其虚拟化以使Lazy Loading
成为可能。或者,如果您不想在延迟加载时使用Include("ProductionLine")
来获取计算机。
OffTopic:你的名字不好。实体框架使用“公约”方法。因此,永远不应将名为Machine
的类的主键称为MyKeyId