Я новичок в ядре Entity Framework, но раньше я использовал Linq to SQL, сначала создав базу данных.Сначала я пытаюсь написать код с сущностью.
У меня есть база данных с несколькими таблицами, и я не могу понять, почему я не могу использовать отношения между классами.
Простой случай: у меня есть Class Chat, который связан со многими многими отношениями с классом User.
Chat chat
public int Id { get; set; }
public int StarterUserId { get; set; }
public User StarterUser { get; set; }
public int OtherUserId { get; set; }
public User OtherUser { get; set; }
Класс пользователя имеет свойство Id.
public int Id { get; set; }
public List<Chat> InChats { get; set; }
public List<Chat> OutChats { get; set; }
И я определил в методе OnModelCreating:
modelBuilder.Entity<Chat>()
.HasOne(x => x.StarterUser)
.WithMany(m => m.OutChats)
.HasForeignKey(x => x.StarterUserId);
modelBuilder.Entity<Chat>()
.HasOne(x => x.OtherUser)
.WithMany(m => m.InChats)
.HasForeignKey(x => x.OtherUserId);
Когда я получаю объект чата и наблюдаю за его свойствами, у меня OtherUser
как объект User
класс и OtherUserId=26
(ХОРОШО)
Но у меня есть StarterUserId=1
, и у меня есть StarterUser as null
.
В базе данных я вижу отношения, которые определены правильно.StarterUserId
и OtherUserId
оба являются внешними ключами в Users
Таблица
Почему это так?Как я могу это исправить?
Решено: Я включил отложенную загрузку и не могу получить соответствующие данные.
- Я установил
Microsoft.EntityFrameworkCore.Proxies
пакет из nuget - При добавлении
DbContext
я включил отложенную загрузку, используя .UseLazyLoadingProxies()
- Изменил модификаторы с
public
на public virtual
для свойств, которые мне нужны для получения связанных данных