Свойство навигации пусто в Entity Framework - PullRequest
0 голосов
/ 11 января 2019

Я строю простую социальную сеть, используя ASP.NET MVC, и обнаружил проблему. Я очень новичок в этом, так что это может быть легко исправить, но здесь идет:

Я пытаюсь настроить систему, в которой пользователь (ApplicationUser) может отправить запрос о дружбе другому пользователю, и я дошел до того, что запросы о дружбе регистрируются в базе данных с отправителем и получателем запрос на добавление в друзья.

Вот модель для запроса друга / друга:

public class Friend
{
    public int Id { get; set; }
    public ApplicationUser User { get; set; }
    public ApplicationUser UserFriend { get; set; }
    public DateTime BecameFriends { get; set; }
    public bool Status { get; set; }

}

Проблема в том, что я пытаюсь отобразить активные запросы на добавление в друзья для вошедшего в систему пользователя. У меня есть ShowFriendRequest действие, которое выглядит так:

public ActionResult ShowFriendRequests(string Id)
{
        //ADC is the ApplicationDataContext

        var result = from f in ADC.Friends select f;
        List<Friend> SearchResult = new List<Friend>();

        SearchResult = result.Where(x => 
        x.UserFriend.Id.Equals(Id)).ToList();

        var model = new FriendViewModel
        {
            FriendList = SearchResult
            //this is a List<Friend>
        };

        return PartialView(model);
 }

Итак, проблема в следующем:

В таблице друзей всего 2 запроса на добавление в друзья, но только один предназначен для пользователя, вошедшего в систему. При отладке вышеуказанного действия он фактически обнаруживает, что существует один запрос на добавление в друзья, поскольку счетчик Friendlist и SearchResults равен 1.

Хотя, когда я пытаюсь извлечь некоторые значения из model.Friendlist или SearchResult либо в виде, либо в контроллере, я могу найти идентификатор и статус, но оба значения User и UserFriend равны нулю. Попытка это может выглядеть так:

System.Diagnostics.Debug.WriteLine(SearchResult[0].UserFriend.Id);

Почему ApplicationUser сущности равны нулю при извлечении одного запроса на добавление в друзья из базы данных?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Ответ TanvirArjel правильный, включение обязательно, если вы хотите выполнить запрос такого рода.

Но вы можете переписать все

var result = from f in ADC.Friends select f;
List<Friend> SearchResult = new List<Friend>();

//ADC is the ApplicationDataContext

SearchResult = result.Where(x => x.UserFriend.Id.Equals(Id)).ToList();

var model = new FriendViewModel
        {
            FriendList = SearchResult
            //this is a List<Friend>
        };


        return PartialView(model);

к этому

var SearchResult = ADC.AspNetUsers.Select(x=>x.Friend).ToList(); //Maybe you will have FriendNavigation if you don't find Friend relationship.. use intellisense in that case

var model = new FriendViewModel
        {
            FriendList = SearchResult
            //this is a List<Friend>
        };


return PartialView(model);

0 голосов
/ 11 января 2019

Проблема в следующей строке:

var result = from f in ADC.Friends select f;

Вы не lazy loading или eager loading ApplicationUser с Friend. Итак, напишите ваш результат запроса следующим образом:

var result = ADC.Friends.Include(f => f.ApplicationUser);
...