2016-08-09 3 views
2

У меня есть две таблицы ProductionLine и Machine. В таблице Machine у меня есть внешний ключ до ProductionLine по имени productionLine.Как получить доступ к столбцу другой таблицы с внешним ключом

Я хочу получить доступ к колонке KeyId в ProductionLine из таблицы Machine. моя машина Класс:

[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=... 

Я получаю эту ошибку

Object reference not set to an instance of an object.

Что я должен делать?

Моих таблиц генерируются EF-кодой первого -задачей является Как получить доступ к KeyId поточной линии от поточной линии Компьютера

+0

Можете ли вы показать Entity Конфигурация типа и определение класса для машины? –

+0

@RichaGarg Мой код обновлен – sadeq

+0

Вы не упомянули атрибут '[ForeignKey]' над свойством 'ProductionLine'. Как вы настраиваете его как внешний ключ? –

ответ

1

Объявление ProductionLine как виртуальное. Также добавьте на него атрибут внешнего ключа.

[ForeignKey] 

public virtual ProductionLine ProductionLine;

P.S пожалуйста, отметьте его в качестве ответа, если он помог

+0

, как сделать его виртуальным? – sadeq

+0

Я хочу установить ForeignKey Атрибут для productionLine Но Migraton не допускает проблемы .... Значение Name должно быть разделенным запятыми именами свойств внешнего ключа – sadeq

+0

Объявите свойство как: public virtual ProductionLine ProductionLine; –

0

Вы должны иметь атрибут выше ProductionLine [ForeignKey("ForeignKeyName")] И сделать это виртуальным сделать Lazy Loading возможным. Если вам не нужна ленивая загрузка, используйте Include("ProductionLine") при получении машины.

Оффтопик: Ваши наречия плохие. Entity Framework использует подход «Конвенция». Поэтому первичный ключ класса с именем Machine, никогда не следует называть MyKeyId

+0

Как сделать виртуальным? – sadeq

+0

Я хочу установить ForeignKey Атрибут для productionLine Но Migraton не пускает проблему.значение Name должно быть разделенным запятыми списком имен свойств внешнего ключа – sadeq

Смежные вопросы