Свойства навигации пустые, пока не будет вызван DbSet - PullRequest
0 голосов
/ 08 сентября 2018

Настройка

Я вхожу в Entity Framework Core (2.1), и у меня возникают проблемы с настройкой отношений. Для простоты я установил простое отношение один к одному между человеком и адресной таблицей:

public class Person
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }

    public PersonAddress Address { get; set; }
}

public class PersonAddress
{
    public int ID { get; set; }
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public int ZipCode { get; set; }

    public int PersonID { get; set; }
    public virtual Person Person { get; set; }
}

С простой явной связью между ними (чтобы убедиться, что это не проблема в том, как все связано):

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Person>()
        .HasOne(p => p.Address)
        .WithOne(a => a.Person);

    modelBuilder.Entity<PersonAddress>()
        .HasOne(a => a.Person)
        .WithOne(p => p.Address);
}

Вот моя проблема

Этот проект настроен в основном приложении asp.net, и у меня установлена ​​точка останова в конце моего конструктора PeopleController. Я также добавил строку, чтобы вывести первого человека из DbSet и присвоить его переменной:

public PeopleController(SmallGroupsSiteContext context)
{
    _context = context;

    Person miles = context.Person.First();
    Debug.Print(miles.Address.ToString());
}

Когда я смотрю на своих местных жителей и смотрю на переменную "миль", ее адресное поле имеет значение Null. Кроме того, если бы я должен был вызвать адрес DbSet Addresses в моем непосредственном окне, значение для Address в объекте «miles» будет установлено на правильное значение.

Что происходит? Когда сущность фактически устанавливает свойства навигации? Должен ли я делать вызовы в другие таблицы так, как бы я хотел, чтобы данные заполнялись? Что-то ленивое происходит на заднем плане, что мне нужно изменить?

1 Ответ

0 голосов
/ 08 сентября 2018

Ой, похоже, я был всего в нескольких поисках Google ...

Похоже, я должен был использовать расширение .Include, когда я загружал DbSet, вот так:

public PeopleController(SmallGroupsSiteContext context)
{
    _context = context;

    Person miles = context.Person.Include(person => person.Address).First();
    Debug.Print(miles.Address.ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...