Настройка
Я вхожу в 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» будет установлено на правильное значение.
Что происходит? Когда сущность фактически устанавливает свойства навигации? Должен ли я делать вызовы в другие таблицы так, как бы я хотел, чтобы данные заполнялись? Что-то ленивое происходит на заднем плане, что мне нужно изменить?