在实体框架中,导航属性为null

时间:2019-01-11 15:42:07

标签: c# entity-framework asp.net-identity

我正在使用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个朋友请求,但是只有一个针对已登录用户的请求。在调试上述操作时,它实际上发现存在一个朋友请求,因为FriendlistSearchResults的计数均为1。

尽管当我尝试在视图或控制器中从model.FriendlistSearchResult提取一些值时,我可以找到ID和状态,但同时可以找到User和{{1 }} 一片空白。尝试这样做可能是这样的:

UserFriend

从数据库中提取一个好友请求时,System.Diagnostics.Debug.WriteLine(SearchResult[0].UserFriend.Id); 实体为什么为空?

2 个答案:

答案 0 :(得分:2)

问题在以下行:

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

您既不是lazy loading的{​​{1}}也不是eager loading的{​​{1}}。因此,如下编写结果查询:

ApplicationUser

答案 1 :(得分:0)

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);