我正在使用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
提取一些值时,我可以找到ID和状态,但同时可以找到User
和{{1 }} 一片空白。尝试这样做可能是这样的:
UserFriend
从数据库中提取一个好友请求时,System.Diagnostics.Debug.WriteLine(SearchResult[0].UserFriend.Id);
实体为什么为空?
答案 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);