Как получить доступ к объекту внешнего ключа Entity Framework - PullRequest
0 голосов
/ 23 декабря 2019

Я создаю проект ASP.NET с Entity Framework и с трудом понимаю, как получить доступ к объекту внешнего ключа в Entity Framework.

У меня есть модель, настроенная примерно так:

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

    [ForeignKey("SetupDetails")]
    [Display(Name = "Setup Details")]
    public int SetupDetailsId { get; set; }

Стоит отметить, что SetupDetails находится в собственной таблице, а мы в таблице с именем Setup. Поэтому, когда я создаю объект, я хочу иметь доступ к чему-то вроде этого:

setup.setupdetails.Name

Так что, исходя из моего понимания, мне нужно создать объект внутри объекта «Настройки» следующим образом:

    public SetupDetails SetupDetails { get; set; }

Однако, когда я делаю это, мы получаем исключение нулевого указателя, которое, очевидно, мы знаем, что оно существует, если это внешний ключ.

Нужно ли просто преобразовать int в класс SetupDetails? Если я изменяю этот тип данных, я получаю сообщение об ошибке:

Невозможно определить отношение, представленное свойством навигации 'Setup.SetupDetailsId' типа 'SetupDetails'.

1 Ответ

2 голосов
/ 23 декабря 2019

То, что вы пытаетесь достичь, требует того, что мы назвали «свойством навигации».

[Display(Name = "Setup Details")]
public int? SetupDetailsId { get; set; }
public SetupDetails SetupDetails { get; set; } 

И когда вы пытаетесь получить эти данные, например:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...