Ссылка на внешний ключ пуста
Я создал две модели с помощью Code First.
public class User
{
public long Id { get; set; }
public long Name { get; set; }
}
public class Article
{
public long Id{ get; set; }
public string Title { get; set; }
public string Text { get; set; }
public User User { get; set; }
}
При создании новой сущности всё добавляется в БД, там есть столбец который указывает на Id User'а.
Но вот беда при обращении к article.User, ссылка User равна нулю. Использую PostgreSQL
Ответы (2 шт):
Для загрузки связанных данных необходимо использовать метод Include().
Вот тут подробное описание: https://docs.microsoft.com/en-us/ef/core/querying/related-data/eager
Все свойства, указывающие на другие таблицы, называются полями навигации. По-умолчанию Entity не загружает данные по полям навигации.
Для того чтобы их загрузить нужно использовать методы Include(a => a.NavField). А так же ThenInclude(a => a.NavField) для загрузки по уровню иерархии(т.е. для полей навигации в связанных таблицах). Эти методы применяются при выборке данных.
Есть способ попроще:
можно использовать AutoInclude() при описании контекста в переопределяемом методе OnModelCreating(...)
Пример:
public class MyContext : DbContext
{
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Article>().Navigation(a => a.User).AutoInclude();
base.OnModelCreating(modelBuilder);
}
}
Тогда при запросе к таблице Article данные по связям подтянутся автоматически.
Так же можно использовать метод UseLazyLoadingProxies() из состава пакета Microsoft.EntityFrameworkCore.Proxies для ленивой загрузки данных.